给定一个模板类:Playground
abstract class Model<T> {
public static create<T extends 'Model'>(
this: { new (): T } & typeof Model,
values?: object
): Promise<T>{
console.log(values);
return {} as Promise<T>; // hack..
};
}
type OnlyAttrs<T> = {
[K in {
[K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? never : K;
}[keyof T]]?: T[K];
};
export abstract class BaseModel<T> extends Model<T> {
asd!: T;
static create<T extends Model<T>>(vals:OnlyAttrs<T>) : Promise<T>{
return super.create(vals) // ##### How to make this work!? #####
}
}
如何重写泛型类的静态超级创建方法?
这个例子取自 Sequelize,试图用 OnlyAttrs<T>
使 create 方法强类型化