如何在Flow接口声明中声明模块的根导出?

时间:2015-11-20 17:35:13

标签: flowtype

在Flowtype接口声明文件中,如何声明模块的module.exports

比如说,我正在使用Express:

import express from 'express';
const app = express();

2 个答案:

答案 0 :(得分:4)

目前的语法是

declare module express {
    declare type Express { ...#use(), #post(), #get(), etc... }
    declare var exports: () => Express
}

您也可以使用declare function exports(): Express,或使用您想要的任何其他类型,例如:

declare module moduleThatExportsNumber {
    declare var exports: number
}

将来,这种基于Common JS的语法可能会被反映ES6模块语义的东西所取代。

在您自己的库中的.js.flow个文件中,您可以执行以下操作:

declare function createExpress(): Express;
declare module.exports: typeof createExpress;

答案 1 :(得分:2)

看起来正在改变,因为var exports语法已被弃用

https://github.com/facebook/flow/issues/1806

有趣的是,您现在可以在命名导出

的同时声明默认导出模块

Node的EventEmitter的示例如下:

declare module "events" {
  declare class EventEmitter {
    static EventEmitter: typeof EventEmitter;

    addListener(event: string, listener: Function): events$EventEmitter;
    emit(event: string, ...args:Array<any>): boolean;
    // additional methods ...
  }

  declare export var EventEmitter: typeof EventEmitter
  declare export default typeof EventEmitter
}
相关问题