打字稿:覆盖泛型类的静态方法

时间:2021-01-08 03:53:43

标签: typescript typescript-typings typescript-generics

给定一个模板类: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 方法强类型化

0 个答案:

没有答案