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();

错误,因为B.Z没有正确转换为ClassA的键-值对,它没有sum().

这样做的正确方法是什么?

plainObj = {z: {key1: {x: 1, y: 2}, key2: {x: 10, y: 20}}

推荐答案

终于让它工作了,Mapdocs个提及用法,但我不能让它工作.原来,您还需要在tsfig.json中设置"emitDecoratorMetadata": true.

你需要换掉你的ClassB美元

class ClassB {
  @Type(() => ClassA)
  z: Map<string, ClassA>;
}

那么它就会完美地发挥作用.

Javascript相关问答推荐

if/else JavaScript中的条件行为

GrapeJS -如何保存和加载自定义页面

如何在RTK上设置轮询,每24小时

我应该绑定不影响状态的函数吗?'

使用JavaScript重新排序行

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

配置WebAssembly/Emscripten本地生成问题

在286之后恢复轮询

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

正则表达式,允许我匹配除已定义的子字符串之外的所有内容

Eval vs函数()返回语义

如何在不影响隐式类型的情况下将类型分配给对象?

在FAQ Accodion应用程序中使用React useState时出现问题

在Odoo中如何以编程方式在POS中添加产品

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

未捕获语法错误:Hello World中的令牌无效或意外

顶点图使用组标签更新列之间的条宽

Plotly.js栏为x轴栏添加辅助文本

KeyboardEvent:检测到键具有打印的表示形式

在AgGrid中显示分组行的单元格值