【问题标题】:TypeScript 2 - @types not recognizedTypeScript 2 - @types 无法识别
【发布时间】:2016-12-28 10:31:07
【问题描述】:

由于法律障碍,我们将 node_modules 放在另一个文件夹中(让我们称之为“外部”),因此 TS 文档中的以下句子不适用:“任何封闭文件夹的 node_modules/@types 中的包都被认为是可见的; 具体来说,这意味着 ./node_modules/@types/、../node_modules/@types/、../../node_modules/@types/ 等中的包”

我相信是这样,因为我的文件夹位于 ./external/node_modules 而不是 ./node_modules。

那么这能以某种方式起作用吗?我也尝试过:

"compilerOptions": {
    "module": "amd",
    "target": "es5",
    "sourceMap": true,
    "removeComments": true,
    "allowJs": false,
    "pretty": true,
    "experimentalDecorators": true,
    "typeRoots": ["./external/node_modules/@types"]
}

文件夹结构:

- external
-- node_modules
--- @types
- tsconfig.json

现在,当我尝试导入 angular 时,我收到“找不到模块 angular”错误消息。

【问题讨论】:

  • 基本上导入角度不起作用(“找不到模块角度”)。

标签: typescript


【解决方案1】:

听起来编译器实际上找不到模块。
编译器正在寻找它的模块和定义文件,所以指定typeRoots是不够的,你可能还需要在compiler options中设置baseUrl

解析非相对模块名称的基本目录

正如Module Resolution baseUrl section中所写:

使用 baseUrl 是使用 AMD 模块的应用程序的常见做法 在运行时将模块“部署”到单个文件夹的加载器。 这些模块的源可以存在于不同的目录中,但是一个 build 脚本会将它们放在一起。

设置 baseUrl 会通知编译器在哪里可以找到模块。所有模块 具有非相对名称的导入被假定为相对于 基本网址。


编辑

我从来没有遇到过你的场景,所以这更像是一个猜测......
但是看看文档中描述的关于模块解析的步骤:

非相对导入将遵循 Node.js 解析逻辑,首先 查找文件,然后查找适用的文件夹。所以导入 { b } from "moduleB" in source file /src/moduleA.ts 将导致 以下查找:

  1. /root/src/node_modules/moduleB.ts
  2. /root/src/node_modules/moduleB.tsx
  3. /root/src/node_modules/moduleB.d.ts
  4. /root/src/node_modules/moduleB/package.json(如果它指定了“typings”属性)
  5. /root/src/node_modules/moduleB/index.ts
  6. /root/src/node_modules/moduleB/index.tsx
  7. /root/src/node_modules/moduleB/index.d.ts

  8. /root/node_modules/moduleB.ts

  9. /root/node_modules/moduleB.tsx
  10. /root/node_modules/moduleB.d.ts
  11. /root/node_modules/moduleB/package.json(如果它指定了“typings”属性)
  12. /root/node_modules/moduleB/index.ts
  13. /root/node_modules/moduleB/index.tsx
  14. /root/node_modules/moduleB/index.d.ts

  15. /node_modules/moduleB.ts

  16. /node_modules/moduleB.tsx
  17. /node_modules/moduleB.d.ts
  18. /node_modules/moduleB/package.json(如果它指定了“typings”属性)
  19. /node_modules/moduleB/index.ts
  20. /node_modules/moduleB/index.tsx
  21. /node_modules/moduleB/index.d.ts

它似乎不应该在./external/...中寻找

【讨论】:

  • 可能是这种情况,但在我的情况下,正确的基本 URL 是默认值(“.”)。或者是吗?我在问题中添加了文件夹结构
  • 顺便说一句,如果我将绝对路径添加到 typeRoots 它工作正常。
  • 有趣。另外,请查看我修改后的答案。
猜你喜欢
  • 2022-08-02
  • 1970-01-01
  • 2020-05-28
  • 2012-10-18
  • 2021-03-30
  • 1970-01-01
  • 2023-02-11
  • 2023-03-14
  • 2021-01-13
相关资源
最近更新 更多