在 Flow 中导入 TypeScript 模块

har*_*ryg 6 typescript flowtype

我们正在将前端 React 应用程序从 Flow 迁移到 TypeScript。

我有 Webpack 和 TS 配置设置来加载 TypeScript 文件,并且所有编译和构建都很好。

流检查是单独执行的(不是构建过程的一部分),直到所有文件都切换到 TypeScript 为止,但由于这种性质的错误而失败:

src/SomeFlowModule.js:5
  5: import TypeScriptModule from './TypeScriptModule';
                           ^^^^^^^^^^^^^ ./TypeScriptModule. Required module not found
Run Code Online (Sandbox Code Playgroud)

有没有办法让 Flow 知道导入的 TypeScript 文件,也许只是将它们视为any

har*_*ryg 2

我想出的解决方案是添加 TypeScript 文件的声明:

declare module TsStub {
  declare var exports: any;
}
Run Code Online (Sandbox Code Playgroud)

您需要在 .flowconfig 中引用此存根,以便 Flow 在密钥下了解它[libs]。例如,如果它保存在interfaces/TsStub.js我只需将其添加到 .flowconfig 中:

[libs]
interfaces/
Run Code Online (Sandbox Code Playgroud)

然后在我的 .flowconfig 中引用存根:

module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(ts\|tsx\)$' -> 'TsStub'
Run Code Online (Sandbox Code Playgroud)

我现在需要导入带有扩展名的 ts 文件(例如import myTsModule from 'my-ts-module.ts'),但它确实编译得很好。

当我开始将流文件转换为 TS 时,我只需要修复扩展名,但编译器可以帮助您完成此操作。