误报 Typescript 找不到模块警告

Posted

技术标签:

【中文标题】误报 Typescript 找不到模块警告【英文标题】:False positive Typescript cannot find module warning 【发布时间】:2019-01-14 10:31:58 【问题描述】:

我正在使用以下代码导入图标:

import Icon from "!svg-react-loader?name=Icon!../images/svg/item-thumbnail.svg"

在 Visual Studio Code 1.25.1 中,我从 tslint 收到以下警告:

[ts] 找不到模块 '!svg-react-loader?name=Icon!../images/svg/item-thumbnail.svg'。

即使我应用 tslint 忽略语句,我仍然会收到此警告:

// tslint:disable-next-line:no-implicit-dependencies

导入工作正常(即 WebPack 构建包时没有错误),但我真的很想摆脱这个警告。有什么想法吗?

【问题讨论】:

从 import 调用 loader 是不寻常的......也许对所有 loader 模块和规则使用 webpack 会更好。 您可以使用// @ts-ignore 忽略该错误。 在您的代码中是否有 Icon 导入的任何实际用例?否则,您可以直接导入文件,我从未见过除了节点模块(或 commonjs .. 或其他任何东西)之外使用过这种导入,我总是看到 webpack 直接导入打字稿而没有“模块化”方式(其中抛出一个公平的错误,因为我真的怀疑在这种情况下是否存在默认导出)。 @briosheje 我正在使用github.com/jhamlet/svg-react-loader,它使用了我也发现的新导入样式。即使为此加载程序设置了 webback,导入仍然是“奇怪的”。 @HardikModha 即使设置了“// @ts-ignore”,警告仍然显示在 VS Code 中。该代码使用 WebPack 构建良好,没有警告,所以我认为它是 VS Code 中的 TSLint 扩展问题? 【参考方案1】:

要解决此问题,请在存储库的根目录中创建文件 types/images.d.ts,其中包含以下内容:

declare module '*.svg' 
  import React from 'react';

  interface SVGProps 
    className?: string,
    width?: number,
    height?: number,
  

  class SVG extends React.Component<SVGProps> 

  export default SVG;

【讨论】:

请考虑这种类型:React.Component&lt;htmlAttributes&lt;SVGElement&gt;&gt;【参考方案2】:

要获得 tslint,您可以这样做

import MyIcon from '!svg-react-loader?name=Icon!./down-arrow.svg'

在你的 tslint.conf 中使用它


  "rules": 
    "no-implicit-dependencies": [
      true,
      ["!svg-react-loader?name=Icon!."]
    ]
  

这有点乱,但它确实有效。本质上,您需要将整个加载程序字符串列入白名单。

【讨论】:

以上是关于误报 Typescript 找不到模块警告的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据绑定:如何避免“找不到 KaptTask”警告

即使安装了@types/node,Typescript 也找不到模块“fs”

typescript在@types中找不到模块

导入 AntDesign 组件的打字稿警告“找不到模块”

在 TypeScript 中找不到模块的声明文件

打字稿:具有有效打字的“找不到模块”