【发布时间】:2021-07-23 10:33:07
【问题描述】:
我想创建一个可以在子类中引用的静态函数。 BaseClass 的示例如下
export abstract class BaseEntity {
public static of<T>(params: Partial<T>, type: new () => T): T {
const item = new type();
Object.assign(type, params);
return item;
}
}
然后我用 User 类扩展了 BaseEntity,如下所示
export class User extends BaseEntity{
public static of(params: Partial<User>): User {
return super.of<User>(params, User);
}
}
这对我来说似乎是一个合法的代码,因为我提供 User 作为泛型类型,并且我已经明确编码 BaseEntity 静态函数应该返回相同类型的函数(不会引发错误)。但是,编写此代码会产生以下错误
TS2417:类静态端“typeof User”错误地扩展了基类 静态端'typeof BaseEntity'。 'of(...)' 返回的类型 这些类型之间不兼容。类型“用户”不可分配给 键入“T”。 'T' 可以用任意类型实例化 与“用户”无关。
似乎是说不能返回类型 User 因为父类返回的类型 T 与 User 类型不兼容。这对我来说毫无意义,因为我明确地向泛型类型提供了 T 应该是 User。我做错了什么,我该如何克服这个问题?
【问题讨论】:
标签: typescript