【问题标题】:VSCode IntelliSense doesn't suggest Angular modules until imported manually in the projectVSCode IntelliSense 不建议 Angular 模块,直到在项目中手动导入
【发布时间】:2019-07-31 15:21:39
【问题描述】:

首先你必须明白我正在从 IntelliJ 切换到 VSCode(也许我对 IntelliJ 寻找模块的方式感到太舒服了)。

我将主要使用 VSCode 来开发由 Angular CLI 生成的 Angular 应用程序。

从一个新的 CLI 生成的应用程序开始,在全新的 VSCode 安装中打开项目(删除了设置和所有扩展)我意识到我需要在 VSCode IntelliSense 意识到它们之前手动导入任何 Angular 模块。

示例: 假设我需要创建 2 个 Angular 服务。两者都需要 HttpClient 来获取数据。在第一个上,我更改了构造函数属性以注入它。当按下 Quick Fix 快捷方式 (CTRL + .) 时,我只收到一个建议,即从 selenium-webdriver 导入 HttpClient。

还是在第一个服务中,我手动添加了 Angular HttpClient 导入:

import { HttpClient } from '@angular/common/http';

转到第二个服务,更改构造函数以以相同方式添加 httpClient 属性,现在按下 Quick Fix 快捷方式时我得到了更多结果:

这是预期的行为还是我做错了什么?已经在 3 个不同的系统上尝试过,结果相同。我期待 IntelliSense 有点删除关于 HttpClient 上下文的智能。

这对于任何模块都是一样的,这意味着您需要手动导入一次,然后 VSCode 才会意识到它。

【问题讨论】:

  • 我也遇到过同样的事情
  • @JanWendland 你让我很开心,因为我知道我不是唯一一个面临这个问题的人!
  • @JanWendland 我发现更改此行为的一种方法是更改​​主 tsconfig.json 文件中的 typeRoots 。尝试在数组中添加“node_modules/@angular/common/http”。现在您将可以访问从此模块公开的所有 API。但最终这样做是没有意义的。

标签: angular typescript visual-studio-code


【解决方案1】:

提到@Andriy Chuma 的回答,对我有用的是添加

"node_modules/@angular/common/http"

在结尾

compilerOptions

tsconfig.json:

"typeRoots": [
  "node_modules/@types",
  "node_modules/@angular",
  "node_modules/@angular/common/http"
]

现在,每当我尝试将 HttpClientModule 导入任何文件时,VSCode 智能感知都会自动完成

【讨论】:

    【解决方案2】:

    我复制、理解并解决了这个问题,实际上要在提示中包含 httpClient 的内容,您还必须添加 node_modules/@angular/common/http。 这与他们导出类型定义的方式有关,您可以找到我的问题,您可以通过更多信息来投票,了解为什么会发生这种情况,很快就会有一个 PR 来解决这个问题https://github.com/angular/angular/issues/35237

    无论如何,要重现此内容,您也可以前往 stackblitz 并尝试输入“httpc”,但您不会看到任何建议。

    【讨论】:

      【解决方案3】:

      到目前为止,我发现的唯一解决方案是将 Angular 包的路径添加到 typeRootstsconfig.json 中。这是一个例子:

      "typeRoots": ["node_modules/@types", "node_modules/@angular"]
      

      这样,除了 node_modules/@types,TypeScript 还会查看 node_modules/@angular 文件夹及其子文件夹以进行类型定义。

      根据TypeScript docs

      如果指定typeRoots,则仅包含typeRoots 下的包。

      我实际上不知道为什么在 Angular documentation 中没有提到这件事,这是正确的,但在打字发现方面听起来有点不完整:

      许多库在其 npm 包中包含定义文件,TypeScript 编译器和编辑器都可以在其中找到它们。 Angular 就是这样一个库。任何 Angular 应用程序的 node_modules/@angular/core/ 文件夹都包含几个描述 Angular 部分的 d.ts 文件。

      您无需执行任何操作即可获取包含 d.ts 文件的库包的类型文件。 Angular 包已经包含了它们。

      【讨论】:

      • 我遇到了同样的问题,就在几个月前,Angular 10 才开始出现这种问题,遗憾的是这个解决方案不起作用:(
      • 我认为 ts 文档的意思是,一旦您指定 typeRoots,将仅包含 DIRECTLY 指定文件夹中的包,没有递归寻路。所以,很遗憾,这个解决方案对我不起作用。
      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 2022-07-25
      • 2019-09-03
      • 2021-12-03
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多