有没有可能为一个类创建一个构造函数,它把这个类的一个示例作为参数?
export class simple {
id: number;
name: string;
constructor(value: simple) {
this = value //I know this doesn't work but this is what I want to achieve
}
}
这是因为我在类上也有一个getter ...
get displayText(): string {
return `${this.name} (${this.id})`;
...我有一个服务,它发出一个返回Observable<simple[]>
的API调用,但我必须使用构造函数Map返回的对象,因为没有它,displayText
返回undefined
。
所以为了简单起见,我想通过将从服务返回的对象传递到构造函数来创建类的新示例,而不是创建一个列出该类所有属性的构造函数。这可能吗?
2条答案
按热度按时间lvmkulzt1#
从描述中可以看出,从服务中获取的对象**并不是
Simple
¹的示例,它们是类似于Simple
示例的纯数据shell,因此使用Simple
作为构造函数参数的类型是不正确的。相反,我会定义一个纯数据类型(也许是
SimpleDTO
)来建模这些类型。然后你可以接受其中一个类型,并将其属性分配给正在构造的示例。例如(但请继续阅读):Playground链接
注意示例属性上的“is definitely assigned”Assert,因为TypeScript不知道
Object.assign
将赋值给这些属性。这是使用Object.assign
的一个问题。另一个是
Object.assign(this, value)
将分配value
的所有属性,甚至是超出SimpleDTO
类型的属性。出于这些原因,您可以考虑使用显式列表:
Playground链接
¹(我使用了首字母大写,因为这是压倒性的标准命名约定。
hrirmatl2#
您可能最好创建一个接口,列出您的服务返回的对象的所有属性。