vscode imports import console = require("console"); automatically

import console = require("console");

console. << I type . and above gets imported automatically in VScode. Anybody knows how to disable that?

(I assume it is one of my extensions. Probably Prettier.)

edit: it only happens in React Typescript environment. not in Typescript without react.

30754 次浏览

我经历了这一点,以及它似乎是一个问题与自动导入功能在 VSCode。禁用所有的扩展似乎也不能让它消失。

作为解决方案,您可以在设置中禁用自动导入。

如果你使用 Javascript

“ javascript.takest.autoImports”: false

如果你使用打字稿

“ typeescript.likest.autoImports”: false

enter image description here

编辑: 错误的自动导入发生在依赖树下的包中

declare module "console" {
export = console;
}

该包可以位于本地 node _ module 目录中,也可以位于全局安装的引用包中。

  1. 在本地 node _ module 中搜索 declare module "console"
  2. 如果您在一个本地包中找到它,那么运行 npm list [packageName]来确定 package.json 中的哪个包依赖于包含控制台代码的包。

如果您没有在本地 node _ module 中找到代码,那么您也可以

  1. 在 package.json 中逐个删除包

  2. 在全局安装的模块中搜索可能被项目中的包引用的控制台代码

% USERPROFILE% AppData 漫游 npm node _ module % USERPROFILE% AppData 本地 MicrosoftTypeScript

我知道这不是一个直截了当的解决方案,但我希望它有所帮助,在我的案例中,我有一个来自 response-national-copilot-> rimraf-> node 的参考,其中包含控制台代码。去除反应-本机-副驾驶解决了这个问题。

如果您添加一个插入 console.log的代码片段并使用它,则不会自动导入“控制台”

Https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets

以下是我的片段:

{
"Print to console": {
"prefix": "cl",
"body": [
"console.log('$1');",
],
"description": "Log output to console"
}
}

免责声明: 这不应该被认为是“解决方案”,但它是最简单/最快的。

这个答案是假设您正在使用 VSCode,其他 IDE 应该是类似的。

  1. 开始输入 console
  2. 单击 Enter 或键入 .,允许 智能感应添加 import console = require("console");
  3. Ctrl + click (或 F12,或 Cmd + click on macOS) on require("console")
  4. 注释掉这段代码:
declare module "console" {
export = console;
}

如果您像我一样忘记了“ cl”,您可以在代码片段中使用多个前缀:)

{
"Print to console": {
"prefix": ["cl","co","con","cons","conso","consol","console", "console.l","console.lo","console.log"],
"body": [
"console.log($1);",
],
"description": "Log output to console"
}
}

防止这种情况发生的一种方法是修改 tsconfig.json 文件,以限制自动导入到项目中的类型集。

我也遇到过同样的问题,我通过加上:

types: []

进入我的 tsconfig.json 文件。这样做的目的是禁用 TypeScript (扩展为 VSCode)自动导入所有与 @types/一起的节点包到项目配置中。如果使用这些类型显式导入包,这并不妨碍 TS 导入这些类型定义。

在我的特定案例中,console定义来自于 @types/node,它作为 Storybook 的一个依赖项被导入到项目中。但是,我的项目是一个 webpack 项目,打算在浏览器中运行,因此将 Node.js 类型导入到我的源代码中是没有意义的。您希望在浏览器中使用的基本类型集是 dom 类型,而不是节点类型。

根据项目的不同,您可能必须显式地将一组基类型包添加到 type 参数中(types: ["dom", "react"]等等)。然而,在我的情况下,这被证明是不必要的,我的项目能够用一个空列表编译得很好。而且 VSCode 自动导入“控制台”的趋势似乎已经完全消失了; 到目前为止,我还没有注意到任何其他的不良影响。

有关在 tsconfig.json 中设置类型的更多信息,请点击: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

我发现的最优雅的解决方案是在项目的某个地方创建虚拟 console.d.ts文件:

declare module 'console' {
export = typeof import("console");
}

这将防止自动进口。

来源: https://github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436