【问题标题】:vscode imports import console = require("console"); automaticallyvscode 导入 import console = require("console");自动地
【发布时间】:2019-04-16 04:17:16
【问题描述】:
import console = require("console");

console.

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

编辑: 它只发生在 React Typescript 环境中。不在 Typescript 中没有反应。

【问题讨论】:

标签: typescript visual-studio-code


【解决方案1】:

如果您添加一个用于插入 console.log 的 sn-p 并改用它,则不会自动导入“控制台”

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

这是我的 sn-p:

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

【讨论】:

  • 虽然不是解决方案,但它很聪明,并且当您无法删除导致问题的包时它可以工作,如大多数投票答案中所述。
  • 我同意@tibuurcio。聪明的解决方法,但我不能接受这是一个解决方案......
  • 没用。在我写控制台然后按“。”后它仍然会自动导入。它自动导入
  • @mr-ghamkhar 如果你想使用上面的 sn-p 你只需要写“cl”或者你在“prefix”中输入的任何内容。它需要不是“控制台”才能避免自动导入行为。
【解决方案2】:

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

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

这将阻止自动导入。

致谢:https://github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436

【讨论】:

  • 这是一个优雅的解决方案,可以签入并且可以跨多个工作区和设备工作。谢谢!
  • 为什么我会得到“导出赋值的表达式必须是环境 context.ts(2714) 中的标识符或限定名称”?可能与我的 tsconfig.json 中的某些设置有关?
  • 是的,它可以...你可以在这里查看我的设置:github.com/codechecks/monorepo/blob/master/tsconfig.json 它适用于 console.d.ts 文件
【解决方案3】:

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

此答案假设您使用的是 VSCode。其他 IDE 应该类似。

  1. 开始输入console
  2. 点击回车或输入.,允许IntelliSense添加import console = require("console");
  3. Ctrl+单击(或 F12,或 Cmd+单击 macOS)require("console")
  4. 注释掉这段代码:
declare module "console" {
    export = console;
}

【讨论】:

  • 如果这是 Reddit,我会给你金币。谢谢:)
  • 效果很好。虽然它应该是 Cmd+click on "console",但这是一个细节。谢谢!
  • 如果 F12 或 Cmd+click 出现问题,请右键单击“控制台”,然后“转到定义”也可以(至少在 osx 上)
  • 这是在 node_modules 目录中编辑一个文件,这意味着一旦你再次执行 npm 安装,“修复”将被重置。我知道这是一个快速解决方案,但几乎无法接受
  • 对于所有不想修改声明文件的人,TS/JS Nightly Plugin 为 VSCode 1.36+ 修复了这个问题
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    如果你和我一样忘记了“cl”,可以在sn-ps中使用多个前缀:)

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

    【讨论】:

    • 真正的答案是懒惰:)
    • 这对我来说是最好的解决方案,因为你不需要编辑内部包
    【解决方案6】:

    我也遇到过这种情况,这似乎是 VSCode 中的自动导入功能的问题。禁用所有扩展似乎也不会让它消失。

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

    如果您使用 Javascript

    “javascript.suggest.autoImports”:假

    如果你使用 Typescript

    “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 解决了这个问题。

    【讨论】:

    • 是的,这也不再导致其他自动导入工作。我喜欢这个功能并且不接受这个作为答案......:-D(谢谢!)必须有另一个解决方案。我还在寻找。
    • 我发现当你用 create-react-app my-app --scripts-version=react-scripts-ts 创建一个新项目时它不会发生所以它必须连接到工作区以某种方式设置。
    • 我做了更多的研究,看到编辑的答案,希望你在你的项目中找到它!
    • 是的,确实有效。我在想,这是一个 VSCode 错误还是来自这些包的创建者?对我来说,它位于 @types/node 和 @types/react-dom 中。谢谢:-)
    • ~/Library/Caches/ 文件夹内的“typescript/3.2/node_modules/@types/node/index.d.ts”中找到了错误代码。我在Mac上。因为它在我的缓存工作区中,所以我刚刚删除了实际代码:``` lang-js declare module "console" { export = console; } ``` 成功了!
    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多