繁体   English   中英

Visual Studio 2017:js 文件导致许多打字稿错误

[英]Visual Studio 2017: js file causes many typescript errors

请参阅下面的编辑

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

一切在 Visual Studio 代码中运行良好,然后我尝试将其转换为 Visual Studio 2017 项目(node.js web)

现在出现了一些问题

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

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

现在 VS 抱怨错误代码 TS4090(“节点”的定义冲突)。

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

TypeScript 的整个集成对我来说并不是很清楚...... MSBuild 能识别现有的 tsconfig.json 吗? 还是我必须在项目文件中配置它,如此处所示

编辑

我刚刚注意到我实际上正在编辑一个 .js 文件。 一旦我将扩展名更改为 .ts,每个警告和错误都会消失。 在将扩展名从 .js 更改为 .ts 之前,我也遇到了许多打字稿错误(如 TS2307,找不到模块'@angular/core')

该文件刚刚进行了导入(从节点)

import * as fs from 'fs';

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

EDIT2 发生的错误是

  • TS2403 - 后续变量声明必须具有相同的类型。
  • TS2300 - 重复标识符“PropertyKey”
  • TS4090 - 发现“节点”的定义冲突(释义:在./node_modulesC:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types

所有错误都是由 C:\Users\ d.ts C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@typesC:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts中的 d.ts 文件引起的C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts

就像鲍登凯利指出的那样,这似乎是造成这个问题的原因似乎是 MS 放在这里的定义文件C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types ,只要我安装我自己的定义./node_modules中的文件 VS 在编辑 JS 文件时找到两个定义(如果存在)。 所以解决方案要么是:

  • 以 MS 方式进行
  • 以某种方式排除 MS 目录

这是https://github.com/Microsoft/TypeScript/issues/14565中相关的 BUG

我能够通过启用消除错误

在此处输入图像描述

对于 JavaScript,请尝试取消选中/禁用Tools > Options > Text Editor > JavaScript/TypeScript > Language Service下的“新 JavaScript 语言服务”。 当我打开随机的 JavaScript 文件并且错误窗口会变得疯狂时,这似乎对我有所帮助。

关于 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 错误窗口中发生了什么,因为我仍然会收到零星的不合理错误(我知道这一点是因为我仍然可以编译)。 我确实知道 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-编译器选择类型/

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

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

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

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

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

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

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

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

仅供参考,这已在 Visual Studio 17.2 中修复🙂

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM