Typescript: Override static method of generic class

Viewed 189

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>

0 Answers
Related