打字稿:要分类的对象

chr*_*s01 6 javascript typescript

可以说我有一个类C和一个对象O的实例(来自JSON)。

class C {
  str:string;
  num:number;
}

var o = JSON.parse ("{\"num\":123, \"str\":\"abc\"}");
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以用o分配/初始化C的实例,并且它可以检查未定义的值以及类型,而无需我自己在复制构造函数/函数中执行此操作?

如果值丢失/未定义或类型不匹配,我想获取错误或异常。

谢谢!

zup*_*upa 9

我来到这里想要从对象文字创建一个类实例。Object.assign()有效,但它不是类型安全的。当然,如果您有预期的 JSON 源,但我只想实例化一个具有已知状态的类。

从 TypeScript 文档来看,类也充当类型。因此,以下内容将起作用:

class C {
    str: string;
    num: number;

    constructor(source: Partial<C>) {
        Object.assign(this, source);
    }
}

// Ok - all properties
const c1 = new C({
    num: 123,
    str: "abc"
});

// Ok - only some of the properties
const c1 = new C({
    num: 123,
});

// Error: unknown property `unexpectedPropertyName`
const c2 = new C({
    num: 123,
    unexpectedPropertyName: "abc"
});
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用Object.assign

class C {
    str:string;
    num:number;
}
var o = JSON.parse("{\"num\":123, \"str\":\"abc\"}");
const instance:C = Object.assign(new C(), o);
Run Code Online (Sandbox Code Playgroud)