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
发生的错误是
- TS2403 - 后续的变量声明必须具有相同的类型。
- TS2300 - 标识符重复 'PropertyKey'
- TS4090 - 发现 'node' 的定义冲突(释义:在
./node_modules
和 C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types
中发现
所有错误均由C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types
或C:\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 文件时的两个定义(如果存在)。
所以解决方案要么是:
- 以 MS 方式进行
- 以某种方式排除 MS 目录
安装到 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://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types
这是https://github.com/Microsoft/TypeScript/issues/14565
中相关的BUG
我能够通过启用
来消除错误
仅供参考,这已在 Visual Studio 17.2
中修复
请看下面的编辑
我使用以下包作为我的 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 发生的错误是
- TS2403 - 后续的变量声明必须具有相同的类型。
- TS2300 - 标识符重复 'PropertyKey'
- TS4090 - 发现 'node' 的定义冲突(释义:在
./node_modules
和C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types
中发现
所有错误均由C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types
或C:\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 文件时的两个定义(如果存在)。
所以解决方案要么是:
- 以 MS 方式进行
- 以某种方式排除 MS 目录
安装到 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://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types
这是https://github.com/Microsoft/TypeScript/issues/14565
中相关的BUG我能够通过启用
来消除错误仅供参考,这已在 Visual Studio 17.2
中修复