【发布时间】:2020-11-22 05:06:00
【问题描述】:
我正在尝试创建一个BaseModel,我的所有模型都从该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
我已尝试按照文档中描述的方式进行所有操作。 https://sequelize.org/master/manual/typescript.html
我收到以下 TypeScript 错误:
TS2345:“typeof MyModel”类型的参数不可分配给“typeof BaseModel”类型的参数。参数“values”和“values”的类型不兼容。类型 'Optional
' 不可分配给类型 'Optional '。 'Optional ' 类型中缺少属性 'field',但在 'Pick ' 类型中是必需的。
请有人帮助我我做错了什么,或者我如何创建一个可以接收从BaseModel继承的任何UniqueModel的方法?
【问题讨论】:
-
如果将
function method<T extends typeof BaseModel>更改为function method<T extends BaseModel>会发生什么? -
@niceman 在这种情况下,该函数不会接受
Class作为参数,但它需要instance。
标签: javascript typescript sequelize.js