如何使Flow理解为Node.js编写的代码?

时间:2016-09-08 16:32:03

标签: flowtype

我刚开始使用Flow,尝试将其引入现有的Node代码库。

以下是Flow抱怨的两行:

import Module from 'module';

const nodeVersion = Number(process.versions.node.split('.')[0]);

关于这些行的警告分别是:

module. Required module not found

call of method `split`. Method cannot be called on possibly null value

所以看起来Flow并不知道Node环境中标准的一些东西(例如process.versions.node保证是一个字符串,并且肯定是一个内置节点叫module)。

但是再一次,Flow的configuration docs表示默认情况下它是节点感知的。我有很多其他的东西,比如import fs from 'fs';引起任何警告。那么我做错了什么?

1 个答案:

答案 0 :(得分:2)

模块fs按预期工作,因为Flow附带了内置定义,请参阅declare module "fs"此处:https://github.com/facebook/flow/blob/master/lib/node.js#L624

关于process.versions.node,您可以在同一文件中看到versions键被键入为可空字符串的映射,没有提及特定的node属性:{{1 }}。因此,您需要制作PR来改进此定义,或者调整代码以使该值为null。

我想现在关于模块“模块”的答案是显而易见的 - versions : { [key: string] : ?string };中的Flow中没有该模块的内置定义。您可以编写自己的定义,并可选择将它们与PR一起发送给Flow团队。您也可以尝试搜索github,有人可能已经完成了这项工作。

那个lib/node.js目录非常有用,它有DOM的流定义和其他内容。