我想用一个对象文字初始化一个类的实例,它不包含类中的所有元素,但其元素在类中。

class ATest{
    aStr:string;
    aNum:number;

    result(){return this.aStr + this.aNum;}
}
let test=new ATest;

test={aStr:"hello",aNum:12};   // error, result() is missing in the object literal

如何利用ts的大部分验证来完成任务?
test=Object.assign(test,{aStr:"hello",aNom:12});

会起作用,但随后您会错过输入字段的验证-请参阅anom,这是错误的,但会进入

最佳答案

您有一个对象文字,必须使用new ClassName()创建一个类的实例
最简单的解决方案是添加一个接受Partial<T>

class ATest{
    aStr:string;
    aNum:number;
    constructor(obj: Partial<ATest>) {
        Object.assign(this, obj);
    }
    result(){return this.aStr + this.aNum;}
 }

 let test=new ATest({aStr:"hello",aNum:12});

在这个新的构造函数中,您可以根据需要对字段进行验证。

10-07 21:57