vscode import import console = require("console"); 自动

dra*_*oul 143 typescript visual-studio-code

import console = require("console");
Run Code Online (Sandbox Code Playgroud)

console."我打字.以上是在VScode中自动导入的.有谁知道如何禁用它?

(我认为这是我的扩展之一.可能比较漂亮.)

编辑:它只发生在React Typescript环境中.没有反应就没有打字稿.

Zen*_*tzi 125

免责声明:不应将其视为“解决方案”,但这是最简单/最快的。

这个答案是假设您使用的是VSCode。其他IDE应该相似。

  1. 开始输入 console
  2. 单击输入或键入.,允许IntelliSense添加import console = require("console");
  3. 按住Ctrl键单击(或F12或Cmd键并单击macOS)在 require("console")
  4. 注释掉以下代码:
declare module "console" {
    export = console;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果这是Reddit,我会给你这个金币。谢谢 :) (9认同)
  • 效果很好。它应该是Cmd +单击“控制台”,但这是一个细节。谢谢! (5认同)
  • 这是在 node_modules 目录中编辑一个文件,这意味着一旦您再次执行 npm 安装,“修复”将被重置。我知道这是一个快速修复,但几乎无法接受 (3认同)

KvD*_*KvD 32

我也经历过这种情况,这似乎是VSCode中自动导入功能的一个问题.禁用所有扩展似乎也没有让它消失.

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

如果你使用Javascript

"javascript.suggest.autoImports":false

如果你使用Typescript

"typescript.suggest.autoImports":false

在此输入图像描述

编辑:错误的自动导入发生是因为依赖关系树中的包中的此代码

declare module "console" {
    export = console;
}
Run Code Online (Sandbox Code Playgroud)

该程序包可以位于本地node_modules目录中,也可以位于全局安装的引用程序包中.

  1. 搜索本地node_modules declare module "console"
  2. 如果在本地包中找到它,请运行npm list [packageName]以确定package.json中的哪个包依赖于包含控制台代码的包.

如果您在本地node_modules中找不到代码,则可以

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

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

%USERPROFILE%\ AppData\Roaming \npm \node_modules%USERPROFILE%\ AppData\Local\Microsoft\TypeScript

我知道这不是一个直接的解决方案,但我希望它有所帮助,在我的情况下,我有一个来自react-native-copilot的参考 - > rimraf - >节点,其中包含控制台代码.删除react-native-copilot解决了这个问题.

  • 是的,这也不会导致其他自动导入工作。我喜欢此功能,不接受它作为答案...:-D(尽管如此!)必须有另一种解决方案。我还在寻找。 (8认同)
  • 在“〜/ Library / Caches /”文件夹中的“ typescript/3.2/node_modules/@types/node/index.d.ts”中找到错误的代码。我在Mac上。因为它在我的缓存工作区中,所以我删除了实际的代码:```lang-js声明模块“ console” {export = console; }```它起作用了! (4认同)

Gio*_*gio 17

如果您添加一个用于插入的代码段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"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管这不是解决方案,但它很聪明,并且在无法删除导致问题的软件包时就可以使用,如多数投票答案所述。 (5认同)

Krz*_*zor 14

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

declare module 'console' {
    export = typeof import("console");
}
Run Code Online (Sandbox Code Playgroud)

这将阻止自动导入。

积分:https : //github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436

  • 为什么得到“在环境context.ts(2714)中,导出分配的表达式必须是标识符或限定名称”?可能与我的tsconfig.json中的某些设置有关吗? (3认同)

FOL*_*LOF 9

如果您喜欢我忘记了“ 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"
    }   
}
Run Code Online (Sandbox Code Playgroud)

  • 不知道是愚蠢还是天才,哈哈! (2认同)

Tal*_*lin 5

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

我遇到了同样的问题,并通过添加以下内容进行修复:

types: []

进入我的tsconfig.json文件。这样做是禁止TypeScript(以及扩展名VSCode)自动将所有随带的节点程序包导入@types/到项目配置中。如果您使用这些类型显式导入程序包,这不会阻止TS导入这些类型定义。

在我的特定情况下,console定义来自@types/node,已作为Storybook的依赖项导入到项目中。但是,我的项目是一个webpack项目,旨在在浏览器中运行,因此将Node.js类型导入我的源代码中没有任何意义。您要在浏览器中使用的基本类型集是dom类型,而不是节点类型。

根据您的项目,您可能必须将一组基本类型包显式添加到types参数中(types: ["dom", "react"]依此类推)。但是,在我看来这是不必要的,我的项目能够使用空列表进行编译。VSCode自动导入“控制台”的趋势似乎已完全消失。到目前为止,我还没有发现任何其他不良影响。

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