带有扩展运算符的 Typescript 构造函数

San*_*alp 3 typescript

如果与扩展运算符一起使用,则需要将属性分配给从接口定义的唯一属性。

我期待使用带有扩展运算符的打字稿构造函数的解决方案。

例如。

export interface IBrand {
    id: string;
    name: string;
}

export class Brand implements IBrand {
    id: string;
    name: string;       

    constructor(data: IBrand) {
        this.id = data.id;
        this.name = data.name;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一种选择,所以当我像这样调用这个类时,不知道有多少成员,但我只id, name需要最终对象。

new Brand({...data })
Run Code Online (Sandbox Code Playgroud)

案例:但是当我有 25 个以上的键时 data

export interface IBrand {
    id: string;
    name: string;
}

export class Brand implements IBrand {
    id: string;
    name: string;       

    constructor(data: Partial<IBrand>) {
        Object.assign(this, data);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不希望再次编写所有属性的构造函数。不管它有 25 个,它只是分配现有的属性将被分配。如果数据具有section, genre或任何其他属性,它将被忽略。

我的第二个片段不起作用。

San*_*alp 6

我找到了使用类转换器包重复代码的更好解决方案。它还有助于公开输入并将其转换为所需的输出。


Hom*_*mer 6

这不使用传播运算符,但您可以使用此答案中的方法

constructor(data: IBrand) {
    for (let key in data) {
        this[key] = data[key];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后实例化...

new Brand(data);
Run Code Online (Sandbox Code Playgroud)