VSCode IntelliSense不会建议使用Angular模块,除非在项目中手动将其导入

时间:2019-03-09 22:52:40

标签: angular typescript visual-studio-code

首先,您必须了解我正在从IntelliJ切换到VSCode(也许我对IntelliJ寻找模块的方式感到很舒服)。

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

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

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

enter image description here

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

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

转到第二项服务,以相同的方式更改构造函数以添加httpClient属性,现在按“快速修复”快捷方式时,我得到了更多结果:

enter image description here

是预期行为还是我做错了?已经在3个不同的系统上尝试过此方法,并且结果相同。我期望IntelliSense会删除一些有关HttpClient上下文的知识。

对于任何模块来说都是相同的,这意味着您需要在VSCode意识到之前手动进行一次导入。

3 个答案:

答案 0 :(得分:2)

我复制,理解并解决了这个问题,实际上是在提示中包含httpClient内容,您还必须添加node_modules/@angular/common/http。 这与他们导出类型定义的方式有关,您会发现我的问题,您可以在https://github.com/angular/angular/issues/35237

上提供有关为什么它发生的确切原因的详细信息,并在不久的将来通过PR解决此问题。

无论如何,要重现此内容,您也可以直接进入stackblitz并尝试输入“ httpc”,您将看不到任何建议。

答案 1 :(得分:0)

是的,您是正确的,我在为研讨会制作演示时遇到过很多次。问题是Visual Studio Code的 Autoimport 插件从

导入 HttpClient
'../../node_modules/@types/selenium-webdriver/http'

代替

'../../node_modules/@angular/common/http'

答案 2 :(得分:0)

到目前为止,我发现的唯一解决方案是将Angular包的路径添加到typeRoots的{​​{1}}中。这是一个示例:

tsconfig.json

这样,除了"typeRoots": ["node_modules/@types", "node_modules/@angular"] 之外,TypeScript还会在node_modules/@types文件夹及其子文件夹中查找类型定义。

根据TypeScript docs

  

如果指定了node_modules/@angular,则仅包含typeRoots下的软件包。

我实际上不知道为什么在Angular documentation上没有提及该问题,这是正确的,但是在键入发现方面听起来有点不完整:

  

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

     

您无需执行任何操作即可获取包含d.ts文件的库软件包的键入文件。 Angular软件包已包含它们。