Visual Studio 2017: js 文件导致许多 typescript 错误

Visual Studio 2017: js file causes many typescript errors

请看下面的编辑

我使用以下包作为我的 VS 项目的基础 -> https://github.com/AngularClass/angular2-webpack-starter

在 Visual Studio 代码中一切正常,然后我尝试将其转换为 Visual Studio 2017 项目(node.js 网络)

现在出现了一些问题

VS 似乎将 TypeScript 定义安装到一个特殊的文件夹中 C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types

此外,我在我的 package.json 中包含了 @types/node,这导致了适当的 node_modules 文件夹。

现在 VS 抱怨错误代码 TS4090('node' 的定义冲突)。

除了删除 \AppData 中的文件夹之外,是否有可能告诉 VS 它应该使用哪些@types?

TypeScript 的整个集成对我来说不是很清楚... MSBuild 是否识别现有的 tsconfig.json?或者我必须在项目文件中配置它 as seen here?

编辑

我刚刚注意到我实际上是在编辑一个 .js 文件。 一旦我将扩展名更改为 .ts,所有警告和错误都消失了。 在将扩展名从 .js 更改为 .ts

之前,我还遇到了很多打字稿错误(例如 TS2307,找不到模块“@angular/core”)

文件刚刚导入(从节点)

import * as fs from 'fs';

谁能解释为什么我会收到这个错误? 为什么一个 JS 文件会导致 200 多个打字稿错误(有些甚至似乎与从上面导入无关)?

编辑2 发生的错误是

所有错误均由C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@typesC:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts

中的d.ts个文件引起

就像 Bowden Kelly 指出的那样,这似乎是导致此问题的原因似乎是 MS 放在此处 C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types 的定义文件,只要我在 ./node_modules 中安装自己的定义文件,VS 就会发现编辑 JS 文件时的两个定义(如果存在)。 所以解决方案要么是:

安装到 C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types 的定义文件仅用于提供 JavaScript 智能感知。如果您的项目中有 TypeScript 或配置了 tsconfig.json 的项目,则需要获取您自己的 .d.ts 文件并将它们存储在您的项目中。幸运的是,该项目随附了您需要的所有 .d.ts 文件,已经在 package.json 中,一个简单的 npm install 应该可以解决问题。

我可以告诉你,与 'node' 的定义冲突可能是由于节点有 2 个副本。d.ts 文件。如果您自己手动安装了一个,在项目 package.json 中包含的那个之上,那么您将遇到这些错误。

我不确定您在 JavaScript 文件中遇到的 TS 错误。你能告诉我一个错误的例子和导致它的代码片段吗?

此外,您可能不希望与 MSBuild 集成,因为此项目已使用 npm 脚本 + webpack 设置为 运行。你应该看看这个插件:https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner

最后,我认为您不想参与 Node.js 网络项目。对于这个项目,您最好只在 VS 中打开文件夹。为此,只需使用 File > Open > Folder... 并导航到您的根文件夹。这将为您提供所需的所有编辑工具,而无需任何 MSBuild 或 VS 项目结构。考虑到这个项目并不是为了利用这些功能而设计的,现在暂时忽略它们可能会更容易。

请让我知道您 运行 遇到的其他问题。

对于JavaScript,尝试uncheck/disable Tools > Options > Text Editor > JavaScript/TypeScript > Language Service下的"new JavaScript language service"。当我打开随机 JavaScript 文件并且错误 window 会发疯时,这似乎对我有帮助。

关于Angular 2错误(找不到模块@angular/core),如果项目目录中有tsconfig.json,Visual Studio和TS编译器都会用那个。如果关闭并重新打开解决方案,项目属性的 TypeScript 选项卡上的所有内容都应该被禁用。

一旦您知道 tsconfig.json 正在工作,如果您使用的是 TS 2.x,编译器应该在 node_modules/@angular/core/index.d.ts 下找到并使用 angular 2 附带的类型,除非你在 tsconfig 中有一个设置像 types: [].

一样覆盖它

我仍然无法 100% 弄清楚 Visual Studio 错误 window 中发生了什么,因为我仍然会遇到零星的不合理错误(我知道这一点,因为我仍然可以编译)。我知道 Visual Studio TypeScript 语言服务控制 Visual Studio IDE 中的错误和智能感知,它与特定版本的 TypeScript(VS 2017 中的 2.1)相关联。这些错误总是在 VS 2015 和现在的 VS 2017 中引起问题。我认为这归结为极度未记录的 TypeScript 虚拟项目的内部运作,我仍然没有找到目的。

这些链接很有用:

http://blog.angular-university.io/typescript-2-type-system-how-do-type-definitions-work-in-npm-when-to-use-types-and-why-what-are-compiler-opt-in-types/

http://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

https://github.com/Microsoft/TypeScript/issues/14540

这是https://github.com/Microsoft/TypeScript/issues/14565

中相关的BUG

我能够通过启用

来消除错误

仅供参考,这已在 Visual Studio 17.2

中修复