flowtype - 如何让 Flow 理解为 Node.js 编写的代码?

标签 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 的 Node 内置函数。

但话又说回来,Flow 的 configuration docs建议默认情况下它是节点感知的。我还有很多其他东西,例如 import fs from 'fs'; ,它不会导致任何警告。那么我做错了什么?

最佳答案

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

关于process.versions.node,您可以在同一个文件中看到versions键被键入为可为空字符串的映射,没有提及具体的node 属性:版本:{ [key: string] : ?string };。因此,您需要制作 PR 来改进此定义,或者调整您的代码以了解该值为 null 的可能性。

我想关于模块“module”的答案现在很明显了——在 lib/node.js 的 Flow 中没有该模块的内置定义。您可以编写自己的定义,并可以选择将 PR 连同它们一起发送给 Flow 团队。您也可以尝试在 github 上搜索这些内容,可能有人已经完成了这项工作。

顺便说一句,lib 目录非常有用,它还有 DOM 和其他内容的 Flow 定义。

关于flowtype - 如何让 Flow 理解为 Node.js 编写的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39396135/

相关文章:

reactjs - React 默认 props 被忽略

javascript - 流程中的密封案例类

javascript - 基于函数参数的可选泛型

regex - 排除 OCaml RegEx 中的特定单词

javascript - 不兼容类型错误 Facebook 流程

javascript - Flow.js 从节点模块推断返回类型

javascript - 如何在另一个文件中使用类类型?

reactjs - [流程]react-native : Required module not found

javascript - 流无法分配函数,因为属性 abort 不可写

javascript - 接受字符串并返回字符串或接受 void 并返回 void 的函数的类型是什么?