Visual Studio 2017,JavaScript intellisense不一致

Cal*_*man 9 javascript intellisense typescript tsconfig visual-studio-2017

TL; DR:如何在Visual Studio 2017中包含tsconfig.json文件,并且仍然像默认情况下那样使用JavaScript intellisense工作,为您自己的代码和第三方库提供代码提示?它是否被剔除,或者我只是需要更好地了解它是如何工作的?

就像jQuery一样,我希望通过intellisense在JavaScript和html文件中无处不在地访问我自己的JavaScript命名空间.如何实现这一目标?


编辑3:
我在developercommunity.visualstudio.com上报告了这个问题.请考虑对该问题进行投票,以吸引微软的更多关注.


编辑2:
目前"解决方案"是Resharper,它提供了人们所期望的直接开箱即用.但对于它自己提供的Visual Studio市场来说,以每年299美元/用户的价格出售它并不是很理想.


编辑1:
如果我对Visual Studio中JavaScript智能感知的期望不准确,下面是我期望它如何运作的一个人为设想的例子.

说我在./Scripts文件夹中创建三个打字稿文件,我们会打电话给他们A.ts,B.tsC.ts.每个都包含自己的命名空间:

A.ts

namespace A {
    export function f1(s: string) {
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

B.ts

namespace B {
    export function f1(n: number) {
        return n;
    }
}
Run Code Online (Sandbox Code Playgroud)

C.ts

namespace C {
    export function f1(b: boolean) {
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个时间点,人们可能期望能够开始看到他们新创建的命名空间的智能感知,实际上,在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文件中获得intellisense吗?...没有.

现在您可能会认为这些文件需要包含在项目中,以便Visual Studio为智能感知提取它们(它们在创建时被排除).所以你将它们包含在项目中.智能感知?没有.jQuery intellisense?不.也许他们需要与您要使用它们的文件位于同一目录中?.....的种类?在很多场合,我遇到了像这样不一致的intellisense:

在此输入图像描述

不知怎的,我们在我们的C3.js中的'A'命名空间得到了智能感知(注意:一个JavaScript文件),但没有其他的.什么?

也许你认为你在正确的轨道上并且你已经在智能感知引擎上取得了小小的胜利.但是,然后重新启动Visual Studio实例并...

在此输入图像描述

等等....我刚刚对'A'命名空间进行了智能感知.发生了什么!?

我不知道.但是在搞砸了一下后,我尝试在.js文件的顶部放置一个import语句,突然间intellisense开始为导入的文件/模块启动.好哇!

在此输入图像描述

甚至在Index.cshtml中,我开始接收导入的命名空间的intellisense.

在此输入图像描述

我用import语句关闭.js文件的那一刻,突然间我在Index.cshtml中丢失了它们的intellisense.等等...什么?与JavaScript文件不同,我无法编写import语句来接收它们的intellisense:

在此输入图像描述

或者至少......不是我自己的命名空间:

在此输入图像描述

正是这种不一致的来回混淆了我对Visual Studio的JavaScript智能感知究竟是如何工作的困惑.我仍然不知道它是否刚刚破裂或是否需要更好地了解它.


原始邮政

系统
Windows 10
VS2017 15.0.0 + 26228.10
启用了新的JavaScript语言服务

我一直在努力让Visual Studio 2017的JavaScript intellisense为我工作几天,现在无济于事.我不知道IDE是否真的让人感到不舒服,或者我是否理解不正确.

我对VS2017的JS智能感知如何工作的理解现在是打字稿定义文件或.d.ts文件.最终,我想通过我们自己的TypeScript/JavaScript来帮助我们智能感知,但是现在我决定让它在一个新项目中保持一致.

如果我创建一个新的ASP.NET MVC 4.5.2项目,开箱即用的JS intellisense似乎工作正常,我的意思是我可以在.js文件中或之间键入一个美元符号($) < script >标签,我正确地接收了jQuery的intellisense.真棒.现在,最终目标是创建TypeScript文件(.ts)并让TypeScript编译器自动生成我们的.d.ts文件,以便我们可以为我们自己的代码获得丰富的intellisense,我希望引入一个tsconfig.json文件到项目的根目录以配置它.

创建tsconfig.json文件后,JS intellisense停止运行.我在.js文件或< script >标签之间输入一个美元符号($),我得到了jQuery的零intellisense.这是一段令人沮丧的经历,但后来我读到了上面链接页面上的这个小注释:

注意:如果使用tsconfig.json配置文件,则默认情况下禁用此功能,但可以将其设置为启用,如下面进一步所述.

"此功能"是指"默认情况下,Salsa语言服务将尝试检测正在使用的JavaScript库......以便提供更丰富的IntelliSense." 好的,所以Salsa语言服务不会自动检测正在使用的库,并在存在tsconfig.json文件时为它们提供智能感知,除非您专门将其配置为"概述如下".至少,这就是我理解它的方式.

如果我们向下滚动页面,一点点来,我们遇到了一个设定tsconfig文件设置enableAutoDiscovery其中"允许自动检测和定义文件下载如上文所述." 关于"如上所述"的内容并未明确提及,但我只能假设它参考前一个注释,指示重新启用Salsa的自动检测功能以提供丰富的智能感知.所以我在我的tsconfig.json文件中包含该选项并且......没有任何好处; 仍然没有JS intellisense.

事实证明,typingOptions.enableAutoDiscovery已重命名为typeAcquisition.enable.Grrrrr.好吧,所以我们在tsconfig.json中进行了更改aaaaaa ...仍然没有JS intellisense.

在这一点上我能写我自己的.d.ts文件和Visual Studio的智能感知将它捡起来好了(大部分时间...),但我仍然没有智能感知如jQuery,这是第三方库不好.

到目前为止,我已经登陆了以下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/**/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

使用视图中的TypeScript虚拟项目,我可以看到我的项目的.ts文件以及我的%LOCALAPPDATA%\ Microsoft\TypeScript \node_modules\@types目录中的jQuery.

TypeScript虚拟项目

我希望有了这一切,我就可以同时拥有自己项目的.ts文件和第三方库(至少那些专门包含的文件;仅在此时使用jQuery).唉...没有.仍然没有jQuery intellisense.

顺便说一句,如果我为jQuery编写一个导入行,突然间我得到了jQuery intellisense

在此输入图像描述

...有趣.也许这是完全合理的; 我没有对模块导入以及Visual Studio的智能感知处理方式进行过多的讨论,但我真正想要的是在我们的代码和第三方库中应用程序范围内的智能感知.

小智 0

看来是2017年3月14日的最新更新(build 26228.09)引起了这个问题,你可以进入控制面板\xe2\x80\x94程序和功能-查看已安装的更新并删除此更新,然后重新打开VS检查intellisense。如果有效,说明此更新导致此问题,您可以暂时不安装此更新

\n\n

我注意到 Microsoft Report Projects for Visual Studio Extension 在项目中使用时可能会导致此类问题,在我将 SQL Server Report 项目添加到解决方案并重新启动 Visual Studio 后,我的几个问题就出现了问题。现在我从解决方案中删除了我的报告项目,但我希望微软解决这个问题

\n