在typescript中,我们可以创建一个基类,这个基类有一个静态函数,子类可以使用这个函数,并且这个函数可以返回调用子类的任何类型。这里显示的是 TypeScript:继承类中静态方法的自引用返回类型。.
type Constructor<T> = { new (): T }
class BaseModel {
static getAll<T>(this: Constructor<T>): T[] {
return [] // dummy impl
}
/**
* Example of static method with an argument:
*/
static getById<T>(this: Constructor<T>, id: number): T {
return // dummy impl
}
}
class SubModel extends BaseModel {}
const savedSubs: SubModel = SubModel.getById(1234)
如何创建一个函数,接受子类类型的输入参数?
从伪代码的角度看,它应该是这样的。
static getByChild<T>(this: Constructor<T>, child: this): T {
return // dummy impl
}
但这是行不通的 我怎么能让方法参数是这个基类的子类呢?
如果是 T
是为了成为子类的实例类型,这一点从 this
被 Constructor<T>
,那么你只需要使用 T
如同 child
参数。
static getByChild<T>(this: Constructor<T>, child: T): T {
return child; // ?
}
你可以验证这个工作。
const oneSub = SubModel.getById(123); // SubModel
const anotherSub = SubModel.getByChild(oneSub); // SubModel
希望能帮到你,祝你好运!