在Flowtype接口声明文件中,如何声明模块的module.exports
?
比如说,我正在使用Express:
import express from 'express';
const app = express();
答案 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
}