【问题标题】:Flowtype – how to export and import types?Flowtype – 如何导出和导入类型?
【发布时间】:2017-12-16 12:04:04
【问题描述】:

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

 // @flow 

type NumberAlias = number;

const n: NumberAlias = "123";

Flow 会正确指出:

  5: const n: NumberAlias = "123";
                            ^^^^^ string. This type is incompatible with
  5: const n: NumberAlias = "123";
              ^^^^^^^^^^^ number

问题出现在我尝试从 moduleA 导出一个类型并将该类型导入到 moduleB 中:

(moduleA.js)

// @flow 

export type NumberAlias = number;

(moduleB.js)

// @flow

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

const n: NumberAlias = 123;

流量抱怨:

src/moduleB.js:3
  3: import type { NumberAlias } from './moduleA';
                                      ^^^^^^^^^^^ ./moduleA. Required module not found

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

文件夹结构为:

src/
    moduleA.js
    moduleB.js
.flowconfig
package.json

【问题讨论】:

  • .flowconfig 为空
  • 你碰巧找到了问题的答案吗?
  • 不,我放弃了,改用 Typescript :[

标签: javascript flowtype


【解决方案1】:

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

如果我没有将// @flow 放入Module A,编译器会将NumberAlias 视为any,并且不会抱怨。我最初忘记添加它,这让我花了几分钟。

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


顺便说一句,两个

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

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

在我的本地环境中解决就好了。你可以试试第二种格式吗?


只要满足这些条件:

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

您提供的代码使用 Flow 0.57.3 和 Node 8.7.0。鉴于错误消息,我建议特别检查文件名和扩展名。

【讨论】:

  • 如果文件在不同的文件夹怎么办?
  • 只需在一个新的环境中设置它,正如你所说,它现在工作得很好!很难说最初出了什么问题。从那时起,文档肯定已经更新了
【解决方案2】:

作为一种解决方法,可以将所有类型放入文件anyname.js 并放入flow-typed 目录。然后所有类型都会自动导出,没有import

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多