【问题标题】:Visual Studio Code Intellisense and JavaScript ES5Visual Studio Code Intellisense 和 JavaScript ES5
【发布时间】:2016-10-31 01:39:47
【问题描述】:

在 Visual Studio Code (VSCode) 中,我正在使用 JavaScript ES5 的遗留应用程序。我注意到 IntelliSense 不适用于我安装的所有类型。 Intellisense 适用于全局类型,但不适用于外部类型?由于这是遗留代码,我宁愿不更改源 .js 文件来让 Intellisense 工作。

用于全局类型的 Intellisense,例如 angular 和 jquery,似乎可以工作。但是,用于外部类型的 IntelliSense 不起作用。

在这里你可以看到我安装了四个类型。 Angular 和 jQuery 作为全局变量安装。 LoDash 和 Ramda 作为外部安装。我创建了一个 jsconfig.json 文件;它是空的。通过拥有 jsconfig.json 文件,IntelliSense 适用于 Angular 和 Jquery,但不适用于 LoDash 和 Ramda。

在接下来的两张图片中,您可以看到 Intellisense 适用于 Angular 和 jQuery。

现在,我正在使用 LoDash,但 IntelliSense 无法正常工作。

如果我导入 LoDash 库,那么 IntelliSense 就可以工作。由于代码是遗留的 ES5 JavaScript 并且 ES5 不支持导入,因此使用导入不是一个可行的选择。

一个好的测试是让 IntelliSense 为 LoDash 工作。我想输入“_”。并让 VSCode 显示 LoDash 属性和方法的列表,而无需在源代码中包含任何其他代码。

有谁知道如何解决这个问题?如果是这样,请提供对您有用的方法。

资源

BarDev

【问题讨论】:

  • 类型是特定于 TypeScript 的(因此您会看到“.ts”文件结尾)。将文件名更改为“main.ts”,我猜它会起作用。将 TypeScript 编译器设置为以 ES5 为目标,就完成了。
  • @MikeMcCaughan - 根据我的解毒剂证据,intellisense 可与 AngularJS 和 jQuery 一起使用,而文件的扩展名为“.ts”。同样在 VSCode 文档中,它讨论了 JavaScript 文件可以使用智能感知。 JavaScript - 丰富的编辑支持code.visualstudio.com/docs/languages/javascript 我注意到在我的 typings.json 文件中,angular 和 jquery 位于“globaDependency”中,但 lodash 位于“dependency”中。我确实尝试在全局范围内安装 lodash typings,但我收到一个错误,即 lodash typings 是一个外部模块。
  • 我没有提到 Intellisense。我专门讨论的是类型、定义文件或“.d.ts”文件。您的屏幕截图显示了“typings\global”下的“angular”文件夹。可能想看看那里:)。 JavaScript 中的 Intellisense 使用 JavaScript 解析引擎来发现有关项目中“.js”文件的元数据。

标签: javascript intellisense visual-studio-code typescript-typings


【解决方案1】:

如official VS Code JS Intellisense documentation中所写,

如果您使用的是 Visual Studio Code 1.8+,您可以交替显式列出包以在您的 jsconfig.json 中获取类型。

"typeAcquisition": {
    "include": [
        "lodash"
    ]
}

现在,当您需要或导入 lodash 时,Visual Studio Code 将使用自动下载的库类型文件来提供丰富的 Intellisense。大多数常见的 JavaScript 库都有可用的类型。

【讨论】:

  • 但是如果我不想要求或导入 lodash,因为我实际上希望它是我遗留 ES5 代码中的全局变量,我该怎么办?
  • 我使用的是CDN版本,所以无论如何我都不需要require或import。不知道有没有办法vscode可以支持这样的智能感知。
【解决方案2】:

您可以创建自己的类型定义文件以在全局上下文中导入内容。当您无法使用导入时,这将使智能感知工作。

import { AxiosStatic } from "axios";

declare global {
  const axios: AxiosStatic;
}

另见How to get intellisense for external javascript libraries with es5 and Visual Studio Code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 2016-07-14
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2022-01-07
    • 2015-07-09
    • 2019-06-10
    相关资源
    最近更新 更多