Visual Studio代码自动导入


78

我正在从Webstorm过渡到Visual Studio Code。Webstorm的性能非常糟糕。

Visual Studio代码在查找所需的依赖项并将其导入方面不是很有帮助。到目前为止,我一直在手动执行此操作,但是老实说,我宁愿等待15秒钟以进行Webstorm查找并添加必须手动挖掘的导入。

屏幕截图:找不到导入

我正在使用@ minko-gechev https://github.com/mgechev/angular2-seed的angular2种子

我的baseDir中有一个tsconfig.json,看起来像这样:

    {
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "pretty": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitUseStrict": false,
    "noFallthroughCasesInSwitch": true
  },
  "exclude": [
    "node_modules",
    "dist",
    "typings/index.d.ts",
    "typings/modules",
    "src"
  ],
  "compileOnSave": false
}

并且我的src / client目录中还有另一个看起来像这样的文件:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "allowSyntheticDefaultImports": true
  }
}

我不知道为什么有两个。Angualr Seed项目使用Typescript gulp构建任务,因此我猜编译是不同的。

我该如何使vscode变得更有帮助?


alm.tools一去🌹
basarat

:-)目前正在经历同样的事情。您找到解决方案了吗?
Rico Leuthold

是的-我发现所有内容都是通过扩展程序添加的。尝试“自动导入”“打字稿进口援助”,“TSD-推荐”,“故宫智能感知”
reach4thelasers

我尝试了“自动导入”扩展名,它在指示正在“扫描”时有点挂起。我在Windows 10上。有人遇到同样的问题吗?
桑申

@ reach4thelasers嘿,我也和您尝试查找扩展的位置相同,我已经安装了上面指定的扩展,然后复制了照片中提到的代码,但是在PipeTransform它没有给我自动导入它的选项,相反,我收到了您在照片中显示的错误...您设法解决了这个问题吗?
棘轮密码

Answers:


42

我通过安装下面的各种插件使它起作用。

在大多数情况下,只要我键入类名,事情就会自己导入。或者,出现一个灯泡,您可以单击。或者,您可以按F1,然后输入“ import ...”,那里也有各种选项。我有点用了。另外,F1用于实现接口的工具也很有用,但并不总是有效。

插件清单

扩展屏幕截图

扩展屏幕截图
*单击以获取完整分辨率


您必须修改任何配置文件吗?还是简单的安装和启用?
《棘轮密码》,2016年

1
不,我认为不需要任何配置修改。我的settings.json中唯一的内容是“ typescript.tsdk”:“ node_modules / typescript / lib /”,它强制vscode在node_modules中使用typescript版本,而不是在系统上安装的版本。
到达4thelasers

1
FYI我从packages.json打字稿版本是“打字稿”: “2.0.3”,
reach4thelasers

由于您的附件图像不再可见,您能否以列表的形式提供插件?
水汪汪的

1
TypeScript Importer也可以与in中的自定义rootDirs或映射一起很好地工作。它修复了VS Code损坏的自动导入功能。pathstsconfig.json
狮子

41

现在2018。你并不需要自动进口Javascript中的任何分机(只要你有checkjs: true你的jsconfig.json文件)和打字稿。

自动导入有两种类型:添加缺失的导入快速修复,它会显示为错误的灯泡:

在此处输入图片说明

以及自动导入建议。这些将在您键入时显示一个建议项。接受自动导入建议会自动将导入添加到文件顶部

在此处输入图片说明

两者都可以与JavaScript和TypeScript一起使用。如果自动导入仍然不适合您,请打开一个问题


2
是的,无论您的项目的打字稿版本与VScode附带的版本是否匹配,自动导入在Mac上都可以很好地使用,但是在其他操作系统(即linux)中则不是这样,您必须指向工作区的版本正如我在回答中解释的那样。
inorganik

3
那是不对的。如果我上面描述的不起作用,那就是一个错误,您应该提交一个错误报告。我是VS Code的JS / TS支持的维护者,并实现了这些功能
Matt Bierner

4
有任何热键吗?我不想每次cmd+.在Mac上导入内容时都点击灯泡
Buncis

1
@Toniocmd+.在Mac上
buncis

1
@MattBierner也应该自动导入Angular组件吗?从屏幕截图来看,这似乎是OP的意思。
Aspiring Dev

19

我使用了steoates的Auto Import插件,这很容易。

自动查找,解析并提供所有可用导入的代码操作和代码完成。与Typescript和TSX一起使用。


我可以确认这个外挂程式运作良好。它甚至无视我的index.ts。默认情况下,VS Code希望从我的index.ts文件中导入。好答案!
埃里克(Eric)

不幸的是没有帮助我,仍然无法从node_modules:(
Pavel

添加此扩展名对我有用。它正确地自动导入了EventEmitterfrom @angular/core因为它在Quick Fix中用红线标出)。没有扩展名,它是EventEmitter从导入的protractor这不是我想要的)。我在这里对MS VSCode维护人员@MattBierner有一个有关不同导入源的问题。
Chris22

12

在tsconfig.app.json中,标准的Angular 10应用具有:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

一旦我将include更改为:

  "include": [
    "src/**/*.d.ts",
    "src/**/*.ts"
  ]

对我有用 对我有用


1
非常感谢,您的解决方案确实有效。事实证明,问题出在tsconfig首选项,而不是IDE。
AME

我会更好,添加在您的解决方案tsconfig.editor.json))之后,我做出了改变tsconfig.app.json应用程序的构建)被打破
火焰

7

如果最近有人遇到此问题,我发现我必须添加一个设置以使用工作区的打字稿版本来使自动导入工作。为此,请将此行添加到您的工作空间设置中:

{
  "typescript.tsdk": "./node_modules/typescript/lib"
}

然后,在vscode中打开一个打字稿文件,然后点击 打字稿版本号。当顶部的选项出现时,选择“使用工作空间版本”,然后重新加载vscode

现在,自动导入应该可以了。


1
这不是必需的。进口自动做工用VS代码捆绑的打字稿的版本
马特Bierner

1
在我的情况下,@ MattBierner很有必要,因为我在Linux(CentOS)上使用VScode。自动导入直到我指出Typescript的工作区安装才起作用,该工作区比VScode附带的版本要早很多
inorganik,

在几乎所有情况下,这都不是一个好建议。如果您看不到自动导入与打字稿的捆绑版本一起使用,请提交错误报告:github.com/Microsoft/vscode/issues/new?template=bug_report.md
Matt Bierner,

2
在问答站点中,@ MattBierner是一个很好的建议。当自动导入不起作用时,知道它是一个错误并不能解决他们的问题。我们不想等待针对这种极端情况的错误修复,并且我不会在存在数万个问题的仓库中提交另一个错误。最后,我想指出的是,这是VScode网站上规定的建议
inorganik,

2
因此,当自动导入不起作用,并且我使用了一堆扩展程序时,如何知道使用VS Code而不是其中一个扩展程序提交错误报告?
安德鲁·科斯特

1

VS Code现在已开箱即用地支持此功能,但似乎该功能有时有效,有时却无效。据我所知,VS Code必须加载自动导入所需的数据,这种情况或多或少是这样的:

  • 从本地文件加载所有导出的数据
  • 从node_modules / @ types加载所有导出的数据
  • 仅当任何本地文件正在导入时,才从node_modules / {packageName}加载所有导出的数据

在以下注释中对此进行了更好的描述:https : //github.com/microsoft/TypeScript/issues/31763#issuecomment-537226190

由于VS Code或特定程序包的类型声明中的错误,最后两点并不总是有效。这就是我的情况,我在普通的Create-React-App中看不到react-bootstrap自动导入。最终解决的问题是手动将package文件夹从node_modules复制到node_modules / @ types,仅保留类型声明文件,例如Button.d.ts。这不是很好,因为如果您删除了node_modules文件夹,它将再次停止工作。但是我更喜欢这种方式,因为它不必总是手动键入导入。在尝试并失败了这些方法之后,这是我的最后一招:

  • 更新VS代码(v。1.45.1)
  • 安装软件包的类型,例如 npm install --save @types/react-bootstrap
  • 添加jsconfig.json文件并按照其他人的建议使用设置
  • 试用所有用于自动导入的插件

我希望这可以帮助别人!


1

如果您使用的是角度,请检查tsconfig.json是否不包含错误。(在问题终端)

由于某种原因,我将这些行加倍,但对我却不起作用

{
  "module": "esnext",
  "moduleResolution": "node",
}

0

我在Typescript版本3.8.3上遇到了这个问题。

Intellisense是我们可以拥有的最好的东西,但是对我来说,自动导入功能似乎也不起作用。我尝试安装扩展程序,即使自动导入不起作用。我已经重新检查了所有与扩展程序相关的设置。最后,当我从以下位置清除缓存时,自动导入功能开始起作用

C:\ Users \用户名\ AppData \ Roaming \ Code \ Cache

并重新加载VSCode

注意:仅当您从(查看)菜单中选择(显示(隐藏的项目))显示AppData时,才能在用户名中看到它。

在某些情况下,我们可能最终会认为存在与导入相关的错误,而实际上,在不知不觉中,我们可能会使用不推荐使用的功能或Angular API进行编码。

例如:如果您尝试编写类似这样的代码

构造函数(http:Http){

// ...}

不推荐使用Http并在较新版本中将其替换为HttpClient的地方,因此我们最终可能会认为与此相关的错误可能与自动导入错误有关。有关更多信息,您可以参考不推荐使用的API和功能



0

includetsconfig.editor.json此处将属性填充到JSON对象的第一级中:

"include": [
  "src/**/*.ts"
]

它对我很好。

另外,如果需要,您还可以添加另一个Typescript文件扩展名,例如:

"include": [
  "src/**/*.ts",
  "src/**/*.spec.ts",
  "src/**/*.d.ts"
]


-1

我正在使用Devin Abbott的'ImportJS'插件进行自动导入,可以使用以下代码进行安装

npm install --global import-js

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.