You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Sequelize的SchemaPrice声明类型(复用已有类型)

解决方案:复用现有Foo接口为SchemaPrice声明类型

直接基于你已有的Foo接口,通过TypeScript工具类型推导Schema的类型,无需新增额外接口,实现字段统一管理:

实现步骤

  1. 从Foo接口中排除Sequelize自动维护的created_at和updated_at字段,提取需要手动定义的字段集合
  2. 结合Sequelize的ModelAttributes类型,生成与FooInstance匹配的Schema类型
  3. 给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:42:51