续写 TypeScript 中的模型 getter

rin*_*t.6 3 sequelize.js typescript

使用 TypeScript 时,在 Sequelize 模型this.getDataValuegetter 函数中使用的正确方法是什么?

这是我得到的错误:

类型 'string | 上不存在属性 'getDataValue' 数据类型摘要 | 定义属性列选项'。

“字符串”类型不存在属性“getDataValue”。

我的模型定义:

import * as Sequelize from 'sequelize';
import sequelize from '../db-connection';

export interface IUserAttributes {
    date_of_birth: Date;
    name: string;
}

export interface IUserInstance extends Sequelize.Instance<IUserAttributes> {
    date_of_birth: Date;
    name: string;
}

const User = sequelize.define<IUserAttributes, IUserInstance>('user', {
    name: {
        type: Sequelize.STRING,
        validate: {
            notEmpty: true,
        },
    },
    date_of_birth: {
        get(): Date {
            return new Date(this.getDataValue('date_of_birth'));
        },
        type: Sequelize.DATEONLY,
        validate: {
            isDate: true,
            notEmpty: true,
        },
    },
});

export default User;
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 6

您需要this在 getter 函数中指定类型

const User = sequelize.define<IUserAttributes, IUserInstance>('user', {
  name: {
      type: Sequelize.STRING,
      validate: {
          notEmpty: true,
      },
  },
  date_of_birth: {
      get(this: IUserInstance): Date {
          return new Date(this.getDataValue('date_of_birth'));
      },
      type: Sequelize.DATEONLY,
      validate: {
          isDate: true,
          notEmpty: true,
      },
  },
});
Run Code Online (Sandbox Code Playgroud)

注意:this参数将不会排放到JS它只是为打字稿编译器的好处。

  • 知道如何处理二传手吗?我想添加 this 的类型注释作为第二个参数,但 TS 不代表它。 (2认同)