首先,您必须了解我正在从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意识到之前手动导入一次。
到目前为止,我发现的唯一解决方案是将Angular包的路径添加到typeRoots
of中tsconfig.json
。这是一个例子:
"typeRoots": ["node_modules/@types", "node_modules/@angular"]
这样,除了node_modules/@types
TypeScript之外,TypeScript还在node_modules/@angular
文件夹及其子文件夹中查找类型定义。
根据TypeScript文档:
如果
typeRoots
指定,则仅包含下的软件包typeRoots
。
我实际上不知道为什么在Angular文档中没有在此问题上提及任何东西,这是正确的,但在键入发现方面听起来有点不完整:
许多库的npm包中都包含定义文件,TypeScript编译器和编辑器都可以在其中找到它们。Angular就是这样一种库。任何Angular应用程序的node_modules / @ angular / core /文件夹都包含多个d.ts文件,这些文件描述了Angular的各个部分。
您无需执行任何操作即可获得包含d.ts文件的库软件包的键入文件。Angular软件包已经包含它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句