【问题标题】:How to get VScode recognize d.ts files without referencing them directly如何让 VScode 识别 d.ts 文件而不直接引用它们
【发布时间】:2019-03-15 18:46:52
【问题描述】:

我有一个使用create-react-app-ts 创建的项目

我还有一组d.ts 文件,它们是从 JSON 模式生成的接口。他们为远程 API 定义了一些接口。

我希望这些d.ts 文件在整个项目中“全局”可用,而无需通过文件名直接引用它们。有点类似于 Promise<T> 定义在全球范围内可用的方式。

我尝试修改tsconfig,将path/to/**/*.dts 添加到include,以及files。我还尝试在compilerOptopns 下添加"typeRoots" 的路径。

这会使项目编译,但 VSCode 没有为这些接口提供 IntelliSense,并在它们下划线为未知。

【问题讨论】:

  • 您找到解决方案了吗?这个我也打过。默认情况下 TS 应该选择任何文件 *.d.ts 但它不会
  • @sidonaldson 是的,您需要将 "types": "index.d.ts" 之类的内容添加到您的 package.json
  • 我有同样的问题,ts 编译没有问题,但 VSCode 不提供智能感知。我发现的一个“解决方案”是,如果您在另一个选项卡中打开了 .d.ts 文件,vscode 确实会提供智能感知。虽然这并不令人满意(我不想保持打开多个定义文件只是为了用智能感知编写代码)。

标签: typescript visual-studio-code


【解决方案1】:

基于tsconfig compiler options,您应该使用选项typeRootsThis section 的文档描述了 @typestypeRootstypes 之间的区别。

对于您的具体情况,这个tsconfig.json 文件应该可以解决问题:

{
    "compilerOptions": {
        "typeRoots" : ["./type-definitions-folder"]
    }
}

如果您还使用来自 npm 的类型定义,您还应该添加 ./node_modules/@types

{
    "compilerOptions": {
        "typeRoots" : ["./node_modules/@types", "./type-definitions-folder"]
    }
}

【讨论】:

  • 我应该更新我的帖子,提到我也尝试过这个选项,就像我说项目构建一样,所以不是tsc 问题,但 VSCode 智能感知仍然不起作用
  • 这很奇怪。如果您仍然需要帮助,找到问题的最快方法可能是发布一个重现问题的存储库(在删除任何机密信息之后)。
  • 你能解释一下对“type-definitions-folder”的引用吗?这是否仅表示根目录,例如 tsconfig.json 所在的位置?或者您的 global.d.ts 文件位于何处?
【解决方案2】:

如果 TypeScript 编译没有错误,但 VSCode 仍然无法识别全局类型并添加适当的智能感知,那么 很可能您的项目包含太多文件并且您对所需文件不够具体要检查的 TypeScript。

要将智能感知添加到全局类型,VSCode 会遍历所有可用文件,因为您没有指定要检查哪些文件,或者它过于宽泛。文件太多,VSCode 不再四处寻找。

使用typeRoots 声明您的全局类型文件夹/文件应该足以让 VSCode 发现它应该查找的文件。 如果没有发生,请考虑在 include 字段中指定您希望智能感知工作的所有路径,或在 exclude 字段中删除您不需要的所有文件。 VSCode 应该关注并将智能感知添加到丢失的文件中。

{
  "compilerOptions": {
    "typeRoots": [
      "path/to/**/*.d.ts"
    ],
    "include": [
      // Add all paths you want intellisense to work
      "path/to/where/you/expect/intellisense/to/work",
      "path/to/another/file/or/folder"
    ]
  }
}

【讨论】:

  • 这对我没有任何帮助。
  • 谢谢,你的方法很有用,但是写的有一些错误,需要写如下``` { "compilerOptions": { "typeRoots": ["./typings"] }, "include": ["./src/*", "./typings/*"] } ```
  • 我认为它是隐式的,但你是对的:显式 > 隐式。谢谢!
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 2021-06-05
  • 2021-02-28
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多