Visual Studio Code 智能感知 Typescript 未工作

20

尽管我已经尝试了很长时间,但是我似乎无论如何都不能让Visual Studio Code的智能感知功能在typescript中超越单个文件。这是在Windows和Ubuntu上都遇到了同样的问题。

我已经包含了一个tsconfig.json文件,但是它仍然无法在项目规模上提供任何智能感知功能。

我的当前测试项目包含以下内容:

tsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "out": "test.js"
    },
    "files": [
        "test2.ts",
        "tester.ts"
    ]
}

tasks.json:

{
    "version": "0.1.0",
    "command": "tsc",
    "showOutput": "always",
    "windows": {
        "command": "tsc.exe"
    },
    "args": ["-p", "."],    
    "problemMatcher": "$tsc"
}

test2.ts:

module test
{
    export class test2
    {

    }
}

tester.ts:

module test
{
    export class tester
    {
        public testy: test2;
    }
}

在类 tester 中,即使我将其更改为 test.test2,intellisense 也不会捕获 test2。将变量添加到 test2 也没有帮助。

有人知道为什么它根本不起作用的可能原因吗?


从 tsconfig.js 文件中完全删除 files - John Papa
1
这些中有哪个起作用了吗?我遇到了问题,最初VS Code为某些库(如angular)提供了智能感知,但当我添加新的库(如lodash或moment)时,它就停止工作了。当我为自己的代码添加新的typescript类时,它也完全停止工作了。这非常令人困惑,因为文档表明这应该是可以正常工作的... - Sam Storie
不是很好,它在 Windows 和 Linux 上非常有 bug。只要项目根目录中有 tsconfig.json 文件,Intellisense 与“.d.ts”文件似乎可以正常工作。每当在 VSCode 中创建/添加新的“.ts”文件时,除非您关闭并重新打开 VSCode,否则它不会为其提供任何智能感知。 - ian.c
好的,我最终通过手动杀死所有与VSCode相关的进程使其正常工作。希望随着编辑器的发展,它变得更加稳定。我开始使用它是因为Sublime中的TypeScript支持仍然不太可靠。 - Sam Storie
12个回答

24

在我的情况下,我必须选择工作区版本而不是VSCode版本的typescript。

点击底部蓝色带中的版本号

enter image description here

并在顶部出现的选项中选择工作区版本。

enter image description here

希望这能帮到你。


4
我甚至在蓝色丝带中都看不到TypeScript版本。你有什么想法为什么会这样? - azizj
你能在“视图”下看到“显示状态栏”的选项吗?那应该可以完成任务。 - Sujit Y. Kulkarni
29
请前往扩展程序并搜索“@builtin typescript and javascript”,启用“TypeScript and JavaScript Language Features”功能。这条信息是为了帮助可能仍在遇到相同问题的用户@azizj1和其他人而提供的。 - asdcamargo
2
我正在使用VSCode的1.71.2版本,但是Typescript版本不像截图中显示的那样出现在同一位置。相反,我必须点击“Typescript”按钮左侧的括号,然后从那里更改版本。希望这能节省几分钟的搜索时间! - Carrm
在我的情况下,我禁用了内置的ts和js扩展,因为我正在使用Volar或类似的扩展来开发VueJS…… - undefined
显示剩余3条评论

8

这是因为您已经告诉编译器您正在使用外部模块:

"module": "commonjs",

但实际上你正在尝试使用内部模块:

module test

最好选择一种方式。

外部模块

如果您正在使用外部模块,请使用:

test2.ts

export class test2 {

}

tester.ts

import ModuleAlias = require('test2');

export class tester {
    public testy: ModuleAlias.test2;
}

内部模块

如果您不使用外部模块,可以使用原始代码,但请删除"module": "commonjs"标志。

{
    "compilerOptions": {
        "out": "test.js"
    },
    "files": [
        "test2.ts",
        "tester.ts"
    ]
}

2
删除模块参数并不能解决问题,因为我正在使用内部模块,智能感知仍然无法工作。但是我注意到关闭IDE并重新打开,然后智能感知就会启动。但是如果我创建一个新文件,那么新文件的智能感知就会停止工作。完全删除模块也没有帮助。由于我正在使用的构建系统,使用外部模块不是一个选项。 - ian.c
我已经添加了一条额外的说明,关于如何修复内部模块的问题。 - Fenton

3

如果你遇到这个问题,请尝试将以下代码替换为:

const { ConnectionPool } = require("mssql");

通过这个:

import { ConnectionPool } from "mssql"

...对应的库。这解决了我的问题。

当然,不要忘记你需要同时拥有实现和@type模块:

npm i mssql
npm i -D @types/mssql

2

简述

检查设置typescript.suggest.autoimports,确保其设置为true


我遇到了同样的问题,禁用了所有扩展程序,但仍然无法解决。我检查了内部版本,并且它在同一项目上运行 - 对我来说,这意味着两件事:

  • 是某个扩展程序导致了问题(但我已经禁用了所有扩展程序,仍然没有解决我的问题,所以不可能是这个原因)
  • 不是tsconfig.json设置的问题,因为内部版本使用相同的配置文件。

我检查了我的用户设置文件(点击图标显示修改后设置的JSON版本),发现该文件被添加了一些我很久没用过的扩展程序的设置。我开始整理这个文件并浏览设置,最终找到了这个:

enter image description here

typescript.suggest.autoimports 被设置为 false。我将其更改为 true,然后它开始工作了。

我不知道是什么导致它变成了 false(我有一个想法,可能是我使用的扩展 Typescript Importer,但我不能确定。


2
很多好的答案在这里,但是对于现在正在阅读并且在过去一个小时内处于我的水平的任何人: 你尝试过重新启动VSC吗?

1

这不是 TypeScript 的问题。

在 Visual Code 1.9 及以上版本中存在安全问题。它试图从您的 Windows 驱动器读取某些数据,如果您没有权限,则不会显示智能提示。

如果您在系统上没有完整的管理员权限,则卸载 1.9.x 版本并安装 VSCodeSetup-1.8.1。

这对我起作用了。


1

在版本 <= 2.0.3(当前版本),node_modules文件夹的智能感知功能无法使用。

它将在2.0.5版本中提供(https://github.com/Microsoft/TypeScript/issues/9323)。

为了暂时解决问题,您可以使用夜间构建版本:npm install -g typescript@next

这对我有用。


1
对我来说,无法显示参数提示是一个问题。Intellisense可以使用,但当我打开函数括号时,无法看到任何参数提示。
我尝试了上面所有的版本管理建议,但没有解决它。
最后,我在VSCodes的settings.json中找到了一个设置,在"[typescript]"键下称为editor.parameterHints.enabled
由于某些未知原因,这个选项没有启用...为什么,天哪。

enter image description here

现在将其设置为true,可以给我提供参数提示。

enter image description here

耶!


0

我会更新tsconfig.json文件,将其改为相对路径:

{
    "compilerOptions": {
        "out": "test.js"
    },
    "files": [
        "./test2.ts",
        "./tester.ts"
    ]
}

另外,正如Steve所提到的,不要混合使用模块(虽然这里不会导致错误)。而且,也许不要使用out:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md


0
我在settings.json中有一个设置,它禁用了我的Typescript智能感知; "typescript.validate.enable": false 希望对你有所帮助。

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