vscode import import console = require(“控制台”); 自动地


145
import console = require("console");

console.<<我键入。及以上会自动在VScode中导入。有人知道如何禁用它吗?

(我认为这是我的扩展程序之一。可能更漂亮。)

编辑:它仅在React Typescript环境中发生。没有打字稿没有反应。


有运气吗?我遇到了同样的问题
user2517182 '18

除了答案中的解决方法外,这似乎是上次更新引入的VSCode中的错误。相应的错误报告在此处填充:github.com/Microsoft/vscode/issues/70157
ofhouse

1
TS / JS每晚插件修复此为VSCode 1.36+
安德鲁·李

Answers:


126

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

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

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

9
如果这是Reddit,我会给你这个金币。谢谢:)
FearMediocrity '19

5
效果很好。它应该是Cmd + click "console",但这是一个细节。谢谢!
Loolooii

如果遇到F12或Cmd + click的问题,请右键单击“控制台”,然后“转到定义”也可以(至少在osx上有效)
imekinox

2
这是在编辑node_modules目录中的文件,这意味着一旦再次执行npm安装,“修复”将被重置。我知道这是一个快速解决方案,但几乎无法接受
Railto

对于所有不想修改声明文件的人,TS / JS Nightly插件为VSCode 1.36+修复了此问题
Andrew Li

31

我也经历了这一点,这似乎与VSCode中的“自动导入”功能有关。禁用所有扩展似乎也不会消失。

解决方法是,可以在设置中禁用自动导入。

如果您使用Javascript

“ javascript.suggest.autoImports”:否

如果您使用打字稿

“ typescript.suggest.autoImports”:否

在此处输入图片说明

编辑:错误的自动导入发生是因为此代码在依赖树下的软件包中

declare module "console" {
    export = console;
}

该软件包可以位于您本地的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解决了该问题。


8
是的,这也不会导致其他自动导入工作。我喜欢此功能,不接受它作为答案...:-D(尽管如此!)必须有其他解决方案。我还在寻找。
龙魂

我发现当您使用create-react-app my-app --scripts-version = react-scripts-ts创建一个新项目时,它不会发生,因此必须以某种方式将其连接到工作区设置。
龙魂

我做了更多研究,看到了修改后的答案,希望您能在项目中找到它!
KvD

1
是的,确实有效。我在想,这是VSCode错误还是来自这些软件包的创建者?对我而言,它位于@ types / node和@ types / react-dom中。谢谢您:-)
dragonsoul '18

4
~/Library/Caches/文件夹内的“ typescript/3.2/node_modules/@types/node/index.d.ts”中找到了错误的代码。我在Mac上。因为它在我的缓存工作区中,所以我删除了实际的代码:```lang-js声明模块“ console” {export = console; }```而且有效!
jcperez-ch

17

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

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

这将阻止自动导入。

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


这是一个优雅的解决方案,可以签入,可以在多个工作空间和设备上工作。谢谢!
phsource

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

是的,可以...您可以在这里检查我的设置:github.com/codechecks/monorepo/blob/master/tsconfig.json它可以与console.d.ts文件一起使用
Krzysztof

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"
    }
}

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

我同意@tibuurcio。聪明的解决方法,但是我不能接受这作为解决方案……
dragonsoul

没用。在编写控制台后,它仍然会自动导入,然后按“”。它汽车进口
Mr.Ghamkhar

1
@ mr-ghamkhar如果您想使用上面的代码片段,则只需要写“ cl”或任何放在“ prefix”中的内容。为了避免自动导入行为,它必须不是“控制台”。
乔治,

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"
    }   
}

1
真正的答案很懒:)
FOLOF

这对我来说是最好的解决方案,因为您不需要编辑内部程序包
哈里森

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

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.