Monday 23 November 2020

Sequelize / Typescript: Types of parameters 'values' and 'values' are incompatible

I'm trying to create a BaseModel from which all my models are inherited. I'm also trying to create a separate method() function that can get any of my models as argument.

This is my example code:

import {
    Model, Optional
} from 'sequelize'; // v6.3.5


interface DefaultAttributes {
    id: number;
}
interface TestAttributes extends DefaultAttributes {
    field: number;
}

class BaseModel<T extends DefaultAttributes> extends Model<T, Optional<T, 'id'>> {
    static test() {
    }
}

class MyModel extends BaseModel<TestAttributes> {
}

function method<T extends typeof BaseModel>(model: T) {
    model.test();
}

method(MyModel) // <<<<<< TypeScript ERROR

I've tried to do everything just as the documentation described. https://sequelize.org/master/manual/typescript.html

I'm getting the following TypeScript error:

TS2345: Argument of type 'typeof MyModel' is not assignable to parameter of type 'typeof BaseModel'.   Types of parameters 'values' and 'values' are incompatible.     Type 'Optional<T, "id">' is not assignable to type 'Optional<TestAttributes, "id">'.       Property 'field' is missing in type 'Optional<T, "id">' but required in type 'Pick<TestAttributes, "field">'.

Can pls someone help me what did I do wrong, or how can I create a method that can receive any UniqueModel inherited from BaseModel?



from Sequelize / Typescript: Types of parameters 'values' and 'values' are incompatible

No comments:

Post a Comment