首先,您必须了解我正在从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属性,现在按“快速修复”快捷方式时,我得到了更多结果:
是预期行为还是我做错了?已经在3个不同的系统上尝试过此方法,并且结果相同。我期望IntelliSense会删除一些有关HttpClient上下文的知识。
对于任何模块来说都是相同的,这意味着您需要在VSCode意识到之前手动进行一次导入。
答案 0 :(得分:2)
我复制,理解并解决了这个问题,实际上是在提示中包含httpClient内容,您还必须添加node_modules/@angular/common/http
。
这与他们导出类型定义的方式有关,您会发现我的问题,您可以在https://github.com/angular/angular/issues/35237
无论如何,要重现此内容,您也可以直接进入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
文件夹及其子文件夹中查找类型定义。
如果指定了
node_modules/@angular
,则仅包含typeRoots
下的软件包。
我实际上不知道为什么在Angular documentation上没有提及该问题,这是正确的,但是在键入发现方面听起来有点不完整:
许多库的npm包中都包含定义文件,TypeScript编译器和编辑器都可以在其中找到它们。 Angular就是这样一种库。任何Angular应用程序的node_modules / @ angular / core /文件夹都包含多个d.ts文件,这些文件描述了Angular的各个部分。
您无需执行任何操作即可获取包含d.ts文件的库软件包的键入文件。 Angular软件包已包含它们。