Given a template class: 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!? #####
}
}
how can I override the static super create method of a generic class?
This example is taken from Sequelize, in an attempt to make the create method strongly typed with OnlyAttrs<T>
question from:
https://stackoverflow.com/questions/65623243/typescript-override-static-method-of-generic-class 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…