在这里我们学习如何编写高质量的 Typescript 声明文件。因此,您正在使用 ReactJS 进行编码并想要导入 SVG 文件,但您的 IDE/tsc 正在抱怨。
[ts] cannot find module './logo.svg'
现在是时候转向 Stackoverflow 寻求快速复制粘贴解决方案了。
但是让我们坚持一下并尝试理解这些文件以及它们对我们的作用。
在 TS/JS 中,我们有很多方法来模块化用 TS/JS 编写的应用程序。目前占据主导地位的是 ESM(又名 ES 模块、ES6 模块)。我们通常通过它们的语法来了解它们:
因此,为了回答最初的问题,在符合 ECMAScript 2015 的 TS/JS 中,任何包含 顶级导入或导出的文件都被视为模块。
如果没有任何顶级导入或导出:
不再有全局命名空间污染。这意味着:
在 TS 模块中,解析是从 import 或 require 语句中获取字符串,并确定该字符串引用哪个文件的过程。
在 TS 中我们有两种策略:
顺便说一句,我们有很多地方可能会有意或无意地更改它(moduleResolution、baseUrl、paths、rootDirs)。
例如,如果您正在构建应用程序以利用 ESM(编译版本正在使用 ESM),那么您需要在compilerOptions.module 中选择“NodeNext”。
注意:如果在该目录中你有一个 package.json。然后 TS 使用它的 main 和 types 来获取它的类型。
在这里了解更多。
所以基本上它会将导入重新映射到查找位置*s* 相对于 baseUrl(如果设置),否则映射到 tsconfig 文件。最常见的用例是路径别名:
[ts] cannot find module './logo.svg'
注意
这对于运行时来说没有任何意义。这意味着您亲爱的捆绑器或编译器需要注意将它们正确地捆绑在一起。如果你的路径指向不存在的地方,那么你的应用程序在 NodeJS 执行时将会崩溃。
提示
除此之外,您还可以利用 package.json 的导入(又名子路径导入)。
要影响发出的 JS 输出,我们可以修改:
所以我们想要导入 .graphql 文件或其他扩展名,TS 不知道它们是什么样的(它无法解析它们的类型)。现在 TS 知道导入的 svg、graphql 或其他文件会是什么样子。
参考。
裸说明符:导入语句中的模块名称,不是相对或绝对路径。这些通常是项目的 node_modules 或其他配置位置中的包的名称。 ↩
以上是TS 中的模块声明的详细内容。更多信息请关注PHP中文网其他相关文章!