使用类和静态成员键入流类型声明模块的语法

时间:2017-05-12 14:20:39

标签: javascript flowtype

我正在为Sequelize构建流式定义,并且遇到了流式的declare部分的小问题。

具体而言,Sequelize通常被定义为:

class Sequelize {
    ....
}

Sequelize.DataTypes = DataTypes;

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

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);

必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

我要试一试,让我知道它是否可以帮助你:)

您可以像这样声明续集定义

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,并将其导出。