zoo*_*man 4 design-patterns factory-pattern typescript
我有两个类:模型和用户.用户扩展了模型.
export Model {
id: number;
static fromData<T>(data: any): T {
return Object.assign(new Model(), data);
}
}
export User extends Model {
name: string;
sayHi(): string {
return 'Hi, ' + this.name;
}
}
Run Code Online (Sandbox Code Playgroud)
我想用它的方式如下:
const currentUser = User.fromData(dataFromServer);
const message = currentUser.sayHi();
Run Code Online (Sandbox Code Playgroud)
方法hi()不起作用,因为我已经创建了Model类的实例.
如何使用TypeScript泛型使用基类静态方法获取派生类的实例?
我正在计划一些共同的不同实体.
我看到了这个答案,但我不知道在我的情况下如何将参数传递给静态方法.
Tit*_*mir 13
由于静态方法在类本身上,我们可以this在静态方法内部使用类构造函数,this类是iself.如果我们this将static方法的参数约束为构造函数returns T(this: new ()=> T),我们将获得返回值的正确输入.该this参数只是为了打字稿编译器的好处,它实际上不会发送给JS,你不必显式传递它:
export class Model {
id: number;
static fromData<T>(this: new () => T, data: any): T {
return Object.assign(new this(), data);
}
}
export class User extends Model {
name: string;
sayHi(): string {
return 'Hi, ' + this.name;
}
}
const currentUser = User.fromData({ id: 10, name: ""});
const message = currentUser.sayHi();
Run Code Online (Sandbox Code Playgroud)
游乐场链接
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |