mysql - 在带有日期的 Sequelize 中使用 Op.between 时出现 TypeScript 错误

标签 mysql database typescript sequelize.js

我想查找某个日期范围内创建的 MySql 表中的所有记录。

所以我写道:

import { Sequelize, Model, DataTypes, Op } from 'sequelize';

const sequelize = new Sequelize({
  // some db connection config
  dialect: 'mysql'
})

class Patient extends Model {
  public guid!: number;
  public name!: string;

  public recordState: number = 0;
  public createdAt?: Date;
  public updatedAt?: Date
}
Patient.init({
  guid: {
    type: DataTypes.STRING,
    primaryKey: true,
    allowNull: false
  },
  name: { type: DataTypes.STRING, allowNull: false },

  recordState: {
    type: DataTypes.INTEGER,
    allowNull: false,
    defaultValue: 0
  },
  createdAt: DataTypes.DATE,
  updatedAt: DataTypes.DATE
}, {
  sequelize,
  modelName: 'Patient',
  timestamps: false
})

Patient.findAll({
  where: {
    createdAt: {
      [Op.between]: [new Date('2020-02-02'), new Date()]
    }
  }
})

但是,当我尝试用 tsc 编译它时,它会报告如下错误:

sequelize.ts:50:5 - error TS2322: Type '{ [between]: Date[]; }' is not assignable to type 'string | number | boolean | WhereAttributeHash | AndOperator | OrOperator | Literal | Where | Fn | Col | WhereOperators | Buffer | WhereGeometryOptions | (string | ... 2 more ... | Buffer)[]'.
  Types of property '[Op.between]' are incompatible.
    Type 'Date[]' is not assignable to type 'string | number | boolean | [number, number] | WhereAttributeHash | AndOperator | OrOperator | Literal | Where | ... 5 more ... | (string | ... 2 more ... | Buffer)[]'.
      Type 'Date[]' is not assignable to type '(string | number | WhereAttributeHash | Buffer)[]'.
        Type 'Date' is not assignable to type 'string | number | WhereAttributeHash | Buffer'.
          Type 'Date' is not assignable to type 'WhereAttributeHash'.
            Index signature is missing in type 'Date'.

50     createdAt: {
       ~~~~~~~~~


Found 1 error.

看来我不能将 Op.between 与日期范围一起使用?但是当我在 JS 中编写类似代码时就可以了。

所以我想知道我的 TS 代码中是否真的有问题,或者只是类型定义中缺少,或者不推荐使用带有日期的 Op.between

最佳答案

您传递的是日期对象而不是字符串。这样做:

Patient.findAll({
  where: {
    createdAt: {
      [Op.between]: [new Date('2020-02-02').toISOString(), new Date().toISOString()]
    }
  }
})

关于mysql - 在带有日期的 Sequelize 中使用 Op.between 时出现 TypeScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983696/

相关文章:

mysql - 在 MySQL 中保存 url 的正确列类型是什么?

database - 我可以访问 Lotus Notes 的数据库吗?

database - 在 PostgreSQL 中使用 pg_notify(text, text) 收听/通知

javascript - 如何在javascript中将包含多个数组的对象转换为对象数组?

Typescript 类是函数,但也具有属性

php - gmdate() 相当于 mysql

mysql - 如何从每个用户那里获取最后一行?

database - 这是对数据库规范化的一次很好的尝试吗?

javascript - window 未定义 angular 通用第三库

mysql - 如何用许多随机数填充 MySQL 表?