Sequelize / Typescript:参数“值”和“值”的类型不兼容

Ada*_*dam 5 javascript sequelize.js typescript

我正在尝试创建一个BaseModel从中继承我所有模型的模型。我也在尝试创建一个单独的method()函数,可以将我的任何模型作为参数。

这是我的示例代码:

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

Run Code Online (Sandbox Code Playgroud)

我已经尝试按照文档描述的那样做所有事情。https://sequelize.org/master/manual/typescript.html

我收到以下打字稿错误:

TS2345:“typeof MyModel”类型的参数不可分配给“typeof BaseModel”类型的参数。参数“值”和“值”的类型不兼容。类型 'Optional<T, "id">' 不能分配给类型 'Optional<TestAttributes, "id">'。'Optional<T, "id">' 类型中缺少属性 'field',但在类型 'Pick<TestAttributes, "field">' 中是必需的。

请有人帮我做错了什么,或者我如何创建一个可以接收任何UniqueModel继承自的方法BaseModel

小智 0

尝试这个:

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 BaseModel>(model: T) {
    model.test();
}

method(MyModel)
Run Code Online (Sandbox Code Playgroud)