在 TypeScript 项目中启用 JavaScript 智能感知的 VS Code

15

在TypeScript项目中有没有一种方法可以启用JavaScript文件的智能提示?如果我像这样从JavaScript包中导入一个函数:

import foo from "js-package"

我在index.js中看到智能提示会捕捉JsDoc注释并展示函数的参数;但是如果我在.ts文件中,就不会看到这些。

如何在VS Code中启用.ts文件的Js智能提示?

编辑: 以下是发生的情况:

Typescript: no intellisense

Javascript: intellisense

这不是讽刺吗?


你尝试过在tsconfig.json中使用AllowJS选项吗? - Akash Kava
尝试在js文件的第一行添加“// @ts-check”。这可能会达到你想要的效果。 - Automatico
你是否有类型定义文件或者这个包已经有 TypeScript 的类型定义文件了?如果这个包没有,那么需要在 @types/... 或者 tsconfig 中包含类型定义文件。(https://github.com/microsoft/vscode/issues/24956)。(https://github.com/bpmn-io/diagram-js/issues/227) - mr.vea
9个回答

8

你不需要任何插件。只需在tsconfig.json中启用typeAcquisition,方法如下:

{
    ...
    "typeAcquisition": {
            "enable": true
    }
}

这使得TypeScript的定义文件可以自动检测并下载。 当我更改设置时,我经常重新加载窗口(重启VSCode)以确保读取了设置,但并非总是必要的。

如果使用tsconfig.json配置文件,则默认情况下禁用此功能,但可以按照以下说明将其设置为启用状态。 来源

之前它位于typingOptions.enableAutoDiscovery下,但已被重构为typeAcquisition.enable,如该Github问题所示。您仍然可以在这些网站上找到有关typingOptions.enableAutoDiscovery的参考信息。我发现在typeAcquisition上查找信息较困难,但模式证明它的存在。

缺失 tsconfig.json?按照此处的顶部答案创建一个。


这似乎真的解决了它。我现在看到的是jsdoc类型信息,而不仅仅是“导入模块”这个东西。 - Alexis Tyler

2

我不确定这是否完全解决了所提出的问题,但是我在我的TypeScript项目(Vue 3、Vite和TypeScript)中遇到了一些IntelliSense问题。我收到了一个警告,说“Partial mode - Project wide IntelliSense not available”,并附带了一个指向此信息页面的链接:https://code.visualstudio.com/docs/nodejs/working-with-javascript#_partial-intellisense-mode

enter image description here

经过一些研究,我发现我在我的设置中使用了下一个选项:

"typescript.tsserver.useSyntaxServer": "always",

该选项使用较轻的服务器来处理 IntelliSense,但仅限于打开的文件。如果您有此行,请将其删除以再次拥有“项目范围内 IntelliSense”。

你能分享你的 tsconfig.json 和 VSCode 设置吗?

如果需要,我可以为此打开一个单独的问题或将其删除。 我认为这可能很有用。


我的 M1 Mac 上的 VSCode 出现了几个星期的“部分模式”问题。我徒劳地搜索答案。最后通过 Bing Chat 找到了答案,我的问题是: “为什么 VSCode 运行在‘typescript intellisense partial mode’?” 解决方案是: "typescript.tsserver.useSyntaxServer": "auto", 并参考了这个页面。 感谢 @Wandeber - MoonTaeTae
我的 M1 Mac 上的 VSCode 出现了几周的“部分模式”问题。我百般搜索也找不到答案。最后在必应聊天中得到了一个答案,我的问题是: “为什么 VSCode 在‘typescript intellisense partial mode’下运行?” 解决方案是: “typescript.tsserver.useSyntaxServer": "auto", 并且参考了这个页面。 谢谢 @Wandeber。 - undefined

0

在 jsconfig.json 文件中添加以下代码

"vueCompilerOptions": {
    "experimentalDisableTemplateSupport": true
},

这里是一张截图:

enter image description here


0

也许你有选项 "typescript.suggest.completeJSDocs": false。 在这种情况下,将其改为true可能会有所帮助。

https://code.visualstudio.com/docs/languages/typescript#_jsdoc-support

请记住,在使用 JSDoc 编写 TypeScript 代码时,不应包含类型注释。TypeScript 编译器仅使用 TypeScript 类型注释,并忽略 JSDoc 中的类型注释。

相同的问题,仍然在悬停时显示导入模块。:( - Alexis Tyler

0

我遇到了一个与npm模块相关的问题,该模块没有来自definitely typed的类型定义。

刚刚我发现,如果在你的.ts文件中添加对.js文件的引用,你就可以获得所引用文件的智能提示。

我的文件顶部看起来像这样:

///<reference path="../node_modules/tinkerforge/Tinkerforge.js" />
///<reference path="../node_modules/tinkerforge/lib/IPConnection.js" />

import * as tinkerforge from "tinkerforge";

let ip = new tinkerforge.IPConnection();
ip.connect();

对我来说,这似乎是一种黑客方式,但它可以在不编写此模块的d.ts文件的情况下实现我想要的功能。

还有其他人可以尝试并确认它是否有效吗?


0
希望能帮到别人,这个帖子上的一个回答建议将 "typescript.tsserver.useSyntaxServer" 调整为 "always"。
对我来说,将其改为 "always" 导致了问题,并使 vscode 提示:
部分模式 - 项目范围内的智能感知不可用
如果你遇到了智能感知的问题,请尝试将设置改为 "auto"。
"typescript.tsserver.useSyntaxServer": "auto"

或者你也可以在GUI设置中进行操作 输入图像描述 调整后,这个问题应该会停止,并且智能感知会恢复正常,祝好运!

-1

你可能想要在编译器选项中启用checkJs。checkJs选项允许TypeScript编译器基于基本类型推断和JSDoc检查JavaScript代码的类型。

另一种方法是自己声明模块:TypeScript有一个很好的文档介绍了这方面的内容。


-1

你不需要为 typescript 初始化 intellisense,它会自动检测。如果你想显式地进行初始化,可以查看下面的图片,你可以从中选择 languageenter image description here


看看我编辑过的问题:我说我不能在.ts文件中使用JavaScript智能感知。我无法强制将JavaScript指定为.ts文件中智能感知的语言... - Etchelon
它将自动检测,您不需要在 .ts 文件中为 JAVASCRIPT 做任何事情。 - Praveen Kumar
3
从我的图片中可以看出,它没有被检测到! - Etchelon

-1

请不要仅仅将某个工具或库作为答案发布。至少在答案中演示它是如何解决问题的。 - Yunnosch
没有太多可以描述的,它为Visual Studio Code添加了智能感知功能。我也遇到了同样的问题,这个扩展在我必须处理Angular项目时非常有帮助。但你是对的,我忘记在推荐中添加插件描述了。 - fhery021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接