class ClassA {
x: number;
y: number;
sum(): number {
return this.x + this.y;
}
}
class ClassB {
@Type(() => ClassA)
z: {[key: string]: ClassA};
}
const b = plainToInstance(ClassB, plainObj);
const z = b.z[key];
const s = z.sum();
Error because b.z is not correctly transformed into key-value pair of ClassA, it doesn't have sum().
What is the correct way to do this?
plainObj = {z: {key1: {x: 1, y: 2}, key2: {x: 10, y: 20}}
Finally got it working, the docs mention usages of Map
but i couldn't get it working. Turns out you also need to set "emitDecoratorMetadata": true
in tsconfig.json.
you need to change your ClassB
class ClassB {
@Type(() => ClassA)
z: Map<string, ClassA>;
}
then it will work perfectly.