如何为Sequelize的SchemaPrice声明类型(复用已有类型)
解决方案:复用现有Foo接口为SchemaPrice声明类型
直接基于你已有的Foo接口,通过TypeScript工具类型推导Schema的类型,无需新增额外接口,实现字段统一管理:
实现步骤
- 从
Foo接口中排除Sequelize自动维护的created_at和updated_at字段,提取需要手动定义的字段集合 - 结合Sequelize的
ModelAttributes类型,生成与FooInstance匹配的Schema类型 - 给
SchemaPrice标注该推导类型,完成类型约束
修改后的代码
首先在定义Schema的文件中引入Foo和FooInstance:
import { ModelAttributes, DataTypes } from 'sequelize'; import { Foo, FooInstance } from './file1'; // 替换为你的实际文件路径
添加类型推导逻辑:
// 从Foo中排除自动维护的字段,得到Schema需要覆盖的字段类型 type FooSchemaFields = Omit<Foo, 'created_at' | 'updated_at'>; // 生成对应的Sequelize Schema类型 type FooSchema = ModelAttributes<FooInstance, FooSchemaFields>;
最后给SchemaPrice标注类型:
export const SchemaPrice: FooSchema = { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, allowNull: false, }, x: { type: DataTypes.STRING, allowNull: false, unique: true, }, y: { type: DataTypes.INTEGER, allowNull: false, unique: true, }, z: { type: DataTypes.BOOLEAN, allowNull: false, unique: true, }, };
优势
- 完全复用
Foo接口的字段定义,避免重复编写字段类型,确保模型与Schema的字段一致性 - TypeScript会自动校验Schema的字段类型是否与
Foo匹配(比如x必须对应字符串类型的数据库字段) - 后续修改
Foo接口的字段时,Schema的类型约束会自动同步,降低维护成本
内容的提问来源于stack exchange,提问作者Bennyh961
相关产品推荐
相关产品推荐

