typescript console = require(“console”);自动地

bvn4nwqk  于 2023-05-08  发布在  TypeScript
关注(0)|答案(7)|浏览(173)
import console = require("console");

console. << I型。和以上的代码会自动导入到VScode中。有人知道怎么解除吗?
(我想这是我的一个扩展。可能更漂亮)。
编辑:只发生在React Typescript环境中。而不是在Typescript没有React。

polhcujo

polhcujo1#

免责声明:这不应该被认为是“解决方案”,但它是最简单/最快的。
这个答案是假设你正在使用VSCode。其他IDE应该类似。
1.开始键入console
1.单击Enter或键入.,允许IntelliSense添加import console = require("console");

  1. require("console")上的Ctrl+单击(或F12,或Cmd+单击(在macOS上))
    1.注解掉这段代码:
declare module "console" {
    export = console;
}
flseospp

flseospp2#

我也经历了这一点,这似乎是VSCode中自动导入功能的问题。禁用所有扩展似乎也不会让它消失。
作为一种解决方法,您可以在设置中禁用自动导入。

如果使用Javascript

“javascript.suggest.autoImports”:假的

如果使用Typescript

“typescript.suggest.autoImports”:假的

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

declare module "console" {
    export = console;
}

该包可以位于本地node_modules目录中,也可以位于全局安装的引用包中。
1.在本地node_modules中搜索declare module "console"
1.如果您在本地包中找到它,请运行npm list [packageName]以确定package.json中的哪个包依赖于其中包含控制台代码的包。
如果在本地node_modules中找不到代码,您可以
1.在package.json中逐个删除包
1.在全局安装的模块中搜索控制台代码,这些模块可能被项目中的包引用
%USERPROFILE%\AppData\Roaming\npm\node_modules %USERPROFILE%\AppData\Local\Microsoft\TypeScript
我知道这不是一个简单的解决方案,但我希望它能有所帮助,在我的例子中,我有一个react-native-copilot -> rimraf -> node的参考,其中有控制台代码。删除react-native-copilot解决了这个问题。

nkhmeac6

nkhmeac63#

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

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

这将阻止自动导入。
图片来源:https://github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436

aor9mmx1

aor9mmx14#

如果您添加了一个用于插入console.log的代码片段并使用它,则不会自动导入“console”
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"
    }
}
lnvxswe2

lnvxswe25#

如果你像我一样忘记了“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"
    }   
}
yzuktlbb

yzuktlbb6#

防止这种情况发生的一种方法是修改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

idv4meu8

idv4meu87#

一个解决方案可以是设置中的"editor.snippetSuggestions": "top",。显然,要定义console.log。

相关问题