【发布时间】:2017-08-22 03:22:53
【问题描述】:
TL;DR:如何在 Visual Studio 2017 中包含一个 tsconfig.json 文件,并且仍然让 JavaScript 智能感知像默认情况下一样工作,为您自己的代码和第三个代码提供代码提示党图书馆?它很无聊,还是我只需要更好地了解它的工作原理?
与 jQuery 非常相似,我希望通过智能感知在 JavaScript 和 html 文件中无处不在地访问我自己的 JavaScript 命名空间。如何做到这一点?
编辑 3:
我在developercommunity.visualstudio.com 上报告了这个问题。请考虑对该问题进行投票以吸引 Microsoft 的更多关注。
编辑 2:
目前,“解决方案”是 Resharper,它提供了人们期望的开箱即用的东西。但是,对于 Visual Studio 自己提供的市场产品而言,299 美元/年/用户的价格并不理想。
编辑 1:
如果我对 Visual Studio 中 JavaScript 智能感知的期望不准确,下面是我期望它如何运行的人为示例。
假设我在 ./Scripts 文件夹中创建了三个 TypeScript 文件,我们将它们命名为 A.ts、B.ts 和 C.ts 。每个都包含自己的命名空间:
A.ts
namespace A {
export function f1(s: string) {
return s;
}
}
B.ts
namespace B {
export function f1(n: number) {
return n;
}
}
C.ts
namespace C {
export function f1(b: boolean) {
return b;
}
}
此时,人们可能希望能够开始看到他们新创建的命名空间的智能感知,事实上,在 A.ts、B.ts 和 C.ts 中,您开始看到这些命名空间的智能感知。很酷。
不幸的是,这不会延续到其他地方,例如 /Home/Index.cshtml。 Index.cshtml 对 A、B 或 C 命名空间一无所知。此外,.js 文件对这些命名空间一无所知,因此需要它们各自的 TypeScript 声明 (.d.ts) 文件。
所以我们将继续将我们的 tsconfig.json 文件添加到我们项目的根目录并像我们上面那样配置它。如果我们对我们的一个 .ts 文件执行编辑并保存它,这会触发我们将相应的 .d.ts 文件编译到我们的 ./Scripts/out 文件夹中。我们现在是否在 Index.cshtml 和 .js 文件中获得智能感知? ...没有。
现在您可能认为需要将这些文件包含在项目中,以便 Visual Studio 将它们用于智能感知(在创建时将它们排除在外)。因此,您将它们包含在项目中。智能感知?不,jQuery 智能感知?不。也许它们需要与您要在其中使用它们的文件位于同一目录中? .....的种类?我在很多场合都遇到过这样的智能感知不一致:
不知何故,我们在 C3.js(注意:一个 JavaScript 文件)中的“A”命名空间获得了智能感知,但其他的都没有。什么?
也许您认为自己走在正确的轨道上,并且在智能感知引擎方面取得了小小的胜利。但随后您重新启动 Visual Studio 实例并...
等等....我只是对“A”命名空间有智能感知。发生了什么事!?
我不知道。但是在搞砸了一段时间后,我尝试在 .js 文件的顶部放置一个 import 语句,突然间智能感知开始为导入的文件/模块启动。呵呵!
甚至在 Index.cshtml 中,我也开始为我们导入的命名空间接收智能感知。
但是,当我关闭带有 import 语句的 .js 文件时,突然间我在 Index.cshtml 中失去了它们的智能感知。等等……什么??与 JavaScript 文件不同,我无法编写导入语句来接收它们的智能感知:
或者至少...不是我自己的命名空间:
正是这种不一致的来回使我对 Visual Studio 的 JavaScript 智能感知究竟是如何工作的感到困惑。我仍然不知道它是否只是坏了,或者我是否需要更好地了解它。
原帖
系统
Windows 10
VS2017 15.0.0+26228.10
新的 JavaScript 语言服务已启用
几天来,我一直在努力让 Visual Studio 2017 的 JavaScript 智能感知为我工作,但无济于事。我不知道 IDE 是否真的有问题,或者我只是没有正确理解它。
我现在对 how VS2017's JS intellisense 作品的理解是通过 typescript 定义文件或 .d.ts 文件。最终,我希望获得智能感知来帮助我们使用我们自己的 TypeScript/JavaScript,但现在我会满足于让它在一个新项目中始终如一地工作。
如果我创建一个新的 ASP.NET MVC 4.5.2 项目,开箱即用的 JS 智能感知似乎可以正常工作,我的意思是我可以在 .js 中键入美元符号 ($)文件或 script> 标签之间,我正确地接收到 jQuery 的智能感知。惊人的。现在,考虑到创建 TypeScript 文件 (.ts) 并让 TypeScript 编译器自动生成我们的 .d.ts 文件的最终目标,以便我们可以为自己的代码获得丰富的智能感知,我想介绍一个 tsconfig.json 文件到项目的根目录以进行配置。
创建 tsconfig.json 文件后,JS intellisense 停止运行。我在 .js 文件或 script> 标签之间键入一个美元符号 ($),我得到 jQuery 的零智能感知。这是一段令人沮丧的经历,但后来我在上面的链接页面上看到了这个小笔记:
注意:如果使用 tsconfig.json,则默认禁用此功能 配置文件,但可以设置为启用进一步概述 下面)。
“此功能”是指“默认情况下,Salsa 语言服务将尝试检测正在使用的 JavaScript 库...以提供更丰富的 IntelliSense。”好的,所以 Salsa 语言服务将不会自动检测正在使用的库,并在存在 tsconfig.json 文件时为它们提供智能感知,除非您按照“如下所述”专门配置它。至少,我是这么理解的。
如果我们稍微向下滚动页面并进入 tsconfig 文件设置,我们会遇到 enableAutoDiscovery 的设置,该设置“启用如上所述的定义文件的自动检测和下载”。关于“如上所述”所指的内容并不是很明确,但我只能假设它是指之前的说明,表明重新启用 Salsa 的自动检测功能以提供丰富的智能感知。所以我将该选项包含在我的 tsconfig.json 文件中并且......没有任何好处;仍然没有 JS 智能感知。
事实证明,typingOptions.enableAutoDiscovery has been renamed to typeAcquisition.enable。呸呸呸。好的,所以我们在 tsconfig.json 中进行了更改 aaaaaa 并且......仍然没有 JS 智能感知。
此时,我能够编写自己的 .d.ts 文件,Visual Studio 的智能感知可以正常使用(大部分时间......),但我仍然没有智能感知对于像 jQuery 这样的 3rd-party 库,这是不好的。
到目前为止,我已经找到了以下 tsconfig.json 文件:
{
"compilerOptions": {
"noEmitOnError": true,
"noImplicitAny": false,
"removeComments": false,
"target": "es5",
"declaration": true,
"declarationDir": "./Scripts/out"
},
"compileOnSave": true,
"typeAcquisition": {
"enable": true,
"include": ["jquery"]
},
"include": [
"./Scripts/app/**/*"
],
"exclude": [
"./Scripts/vendors/**/*",
"./Scripts/out/**/*"
]
}
查看 TypeScript 虚拟项目后,我可以看到项目的 .ts 文件以及 jQuery 都包含在我的 %LOCALAPPDATA%\Microsoft\TypeScript\node_modules\@types 目录中。
我希望在完成所有这些后,我可以同时为我自己的项目的 .ts 文件和 3rd 方库(至少是那些特别包含的库;此时只有 jQuery)提供智能感知。唉……不。仍然没有 jQuery 智能感知。
顺便说一句,如果我为 jQuery 编写导入行,我会突然得到 jQuery intellisense
...有趣。也许这很有意义;我并没有搞砸模块导入以及 Visual Studio 的智能感知如何处理这些问题,但我真正想要的是在我们的代码和第 3 方库中都具有智能感知应用程序范围。 p>
【问题讨论】:
-
我一直在经历同样的行为。一段时间以来,我的命名空间有了智能感知。突然之间,我失去了所有这些。无法弄清楚它是如何在 vs 2017 中为 javascript/typescript 读取和构建智能感知的
-
现在是六月,当然。我想知道您是否在这个问题上取得了任何进展?在将项目文件的 TypeScriptToolsVersion 节点修改为 2.2 后,我能够使用 tsconfig.json 文件让 Intellisense 在 VS2017 中工作。您的工具版本设置为多少?
标签: javascript typescript intellisense visual-studio-2017 tsconfig