Flow 和自定义 Webpack 加载器

dam*_*amd 3 javascript webpack flowtype

我使用 Webpack 使用 Flow 类型构建我的 React 项目。我已经将 Webpack 配置为使用svg-sprite-loader导入 SVG 文件,如下所示:

{
  test: /\.svg$/,
  loader: ['svg-sprite-loader']
}
Run Code Online (Sandbox Code Playgroud)

这使我可以“导入”SVG 文件,如下所示:

import letterCellSymbol from '../styles/icons/tool-letter.svg'
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样使用我的 React 组件中的文件:

<svg className="icon">
  <use xlinkHref={`#${letterCellSymbol.id}`} />
</svg>
Run Code Online (Sandbox Code Playgroud)

这当然会导致 Flow 类型检查出现问题:

Error: src/components/Toolbox.jsx:70
 70: <use xlinkHref={`#${letterCellSymbol.id}`} />
                                          ^^ property `id`. Property not found in
 70: <use xlinkHref={`#${letterCellSymbol.id}`} />
                         ^^^^^^^^^^^^^^^^ String
Run Code Online (Sandbox Code Playgroud)

告诉 Flow 这些 SVG 文件使用类型导出对象{id: string}或完全忽略这些错误的正确方法是什么?

dam*_*amd 5

我编辑了我的.flowconfig文件以包括:

[options]
module.name_mapper.extension='svg' -> '<PROJECT_ROOT>/src/helpers/SVGModule.js'
Run Code Online (Sandbox Code Playgroud)

然后我创建了文件./src/helpers/SVGModule.js并输入:

/* @flow */
export default { id: '' }
Run Code Online (Sandbox Code Playgroud)

这使得 Flow 认为任何以.svgexports结尾的导入/需要的文件{id:''},因此错误被忽略。缺点是不存在的文件不会报告为错误。

帮助我解决这个问题的来源: