具有 class 和静态成员的流类型声明模块的类型语法

Type syntax for flow type declared module with class and static members

我正在为 Sequelize 构建流类型定义,运行 流类型的 declare 部分出现了一个小问题。

具体Sequelize一般定义为:

class Sequelize {
    ....
}

Sequelize.DataTypes = DataTypes;

我可以为其中之一生成流类型声明,但不能同时为两者生成流类型声明。当我将 DataTypes 放在 class 中时,它们是实例化范围不可用的成员变量。

declare export default class sequelize$Class {
  constructor(...);
  DataTypes: sequelize$DataTypes;
}

declare var DataTypes: sequelize$DataTypes;
declare export var DataTypes;

因为我需要编写如下代码:

const db = new Sequelize(...)
const MyModel = db.define(... { email: { type: Sequelize.DataTypes.STRING } })

目前我已经完成了这个:

import Sequelize, { DataTypes } from "sequelize";
const sequelize: sequelize$Sequelize = ((new Sequelize(settings.database, { logging: false })): any);

必须有更好的方法。

我要试一试,如果对您有帮助,请告诉我:)

你可以像这样声明sequelize定义

declare module 'sequelize' {
  declare type sequelize$DataTypes = {
    STRING: string
  }

  declare export default class sequelize$Class {
    static DataTypes: sequelize$DataTypes;
    constructor(database: Object, options: Object): void;
  }

  declare export var DataTypes: sequelize$DataTypes;
}

这为您提供了默认导出和命名导出。我预先定义了 sequelize$DataTypes,将其作为静态 属性 传递给 sequelize$Class,然后将其导出。