您如何将整个模块的类型分配给非结构化变量?

时间:2018-12-03 15:31:02

标签: javascript node.js flowtype

我试图将依赖注入添加到CommonJS模块中,以便在测试时轻松模拟HTTP调用。

有效的旧代码(Flow知道http的类型):

const myModule = require('./my-module.js');

// my-module.js
const http = require('http');
module.exports = {
  doSomething: () => http.get(...);
};

无效的新代码:

const myModule = require('./my-module.js')({http: require('http')});

// my-module.js
module.exports = ({ http }) => ({
  doSomething: () => http.get(...);
});

我收到错误消息“缺少用于解构的类型注释。”,我不知道要使用哪种类型注释。

我尝试用各种内容注释http属性,看看会发生什么,但无济于事,例如:

type ModuleOptions = $ReadOnly<{
  http: typeof require('http'),
}>;

module.exports = ({ http }: ModuleOptions) => ({

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

它必然会发生。花了几个小时进行谷歌搜索和尝试之后,在发布SO的半小时内我就知道了:

import typeof HttpModule from 'http';
type ModuleOptions = $ReadOnly<{
  http: HttpModule
}>;

module.exports = ({ http }: ModuleOptions) => {