Flowtype - 如何导出和导入类型?

Ale*_*ksG 9 javascript flowtype

我已经关注https://flow.org/en/docs/install/,当在单个文件中使用时,流程正常工作,如下所示:

 // @flow 

type NumberAlias = number;

const n: NumberAlias = "123";
Run Code Online (Sandbox Code Playgroud)

Flow会正确地指出:

  5: const n: NumberAlias = "123";
                            ^^^^^ string. This type is incompatible with
  5: const n: NumberAlias = "123";
              ^^^^^^^^^^^ number
Run Code Online (Sandbox Code Playgroud)

我尝试从moduleA导出类型并在moduleB中导入该类型时出现问题:

(moduleA.js)

// @flow 

export type NumberAlias = number;
Run Code Online (Sandbox Code Playgroud)

(moduleB.js)

// @flow

import type { NumberAlias } from './moduleA';

const n: NumberAlias = 123;
Run Code Online (Sandbox Code Playgroud)

Flow抱怨:

src/moduleB.js:3
  3: import type { NumberAlias } from './moduleA';
                                      ^^^^^^^^^^^ ./moduleA. Required module not found
Run Code Online (Sandbox Code Playgroud)

这不是它在https://flow.org/en/docs/types/modules/中的描述吗?

文件夹结构是:

src/
    moduleA.js
    moduleB.js
.flowconfig
package.json
Run Code Online (Sandbox Code Playgroud)

Mik*_*ick 2

当我设置它时,这正如您所期望的那样,使用src项目根目录下的文件夹中提供的两个文件。 moduleB.js:

流量误差

如果我未能输入// @flowModule A编译器将视为NumberAliasany并且不会抱怨。我最初忘记添加它,这让我困惑了几分钟。

我能找到产生“未找到 moduleA”错误的唯一方法是更改​​ moduleA 的文件扩展名(或文件名)。例如,如果文件名为moduleA.tsModuleA.js或简单地称为moduleA,则导入将无法按上述方式解析。


顺便说一句,两者

import type { NumberAlias } from './moduleA';
Run Code Online (Sandbox Code Playgroud)

import type { NumberAlias } from './moduleA.js';
Run Code Online (Sandbox Code Playgroud)

在我当地的环境中解决得很好。您可以尝试第二种格式吗?


只要满足这些条件:

  • 两个文件位于同一文件夹中
  • 两者都有.js(或.jsx) 扩展名
  • 文件名与导入语句完全匹配
  • 两者都包含// @flow评论

您提供的代码可以使用 Flow 0.57.3 和 Node 8.7.0 运行。根据错误消息,我建议特别检查文件名和扩展名。