【问题标题】:Visual Studio 2017: js file causes many typescript errorsVisual Studio 2017:js 文件导致许多打字稿错误
【发布时间】:2017-08-11 21:25:37
【问题描述】:

请看下面的编辑

我使用以下包作为我的 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?还是我必须在项目文件as seen here 中配置它?

编辑

我刚刚注意到我实际上正在编辑一个 .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\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文件引起的

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

  • 按照 MS 方式进行操作
  • 以某种方式排除 MS 目录

【问题讨论】:

  • 下面的两个答案都有帮助,但我必须选择一个,我选择了第一个发布的答案。但是,如果您遇到相同的问题,请查看两个答案。 (而不是尝试找到解决方案,直到你决定像我一样回到 VS Code ......)

标签: javascript typescript npm visual-studio-2017


【解决方案1】:

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

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

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

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

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

请告诉我您遇到的其他问题。

【讨论】:

  • 这很有趣。我刚刚检查过了。当我将它用作 JS 文件并跳转到“fs”的定义时,我会进入 C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types? 但如果我将它用作 TS 文件,我会进入我的 ./node_modules/@types 文件夹。是否可以忽略 TypeScript\node_modules 文件夹?不幸的是,我无法提供任何错误,因为它们目前没有出现......
  • 我一写评论,错误就出现了。我用这些新信息编辑了我的问题。
  • 只是为了评论您的建议:我已经尝试更改我的项目,以便它更好地与 MS Build 集成(我使用 NPM Task Runner)并将项目类型更改为空的 ASP.NET Web 应用程序。但老实说,大多数情况下,如果使用 VS Code 感觉更快、更干净、更清晰。尝试 VS 2017 路线的主要原因是因为我想将 Front- 和 Backen 放在一个地方(解决方案)。 VS 2017 做了很多事情(比如 @types 是如何更新的?)
  • 保持这个状态,因为仍然存在 Visual Studio TypeScript 错误问题。这是一个非常简单的项目,它导致了我写的虚假 TS 错误和相应的 GitHub 问题(迄今为止尚未引起任何关注)。 github.com/jimbarrett33/VS2017_Typescript_Testgithub.com/Microsoft/TypeScript/issues/15055。任何帮助,将不胜感激。我尝试向开发人员推荐/推送 Visual Studio,但很难做到,因为这些虚假错误会降低大约 30% 的生产力。
【解决方案2】:

对于 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 中有一个设置,如 @ 987654326@.

我仍然无法 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-compiler-opt-in-types/

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

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

【讨论】:

  • 禁用 Javascript 语言服务似乎有帮助(有时需要很长时间才能刷新错误)
  • 是的,我也看到了。错误将保留在那里,并在某个时候消失。有时在解决方案中关闭 JS 文件会触发它们消失,但并非总是如此。我希望我知道如何触发语言服务来做这件事,而不是等待它处于什么周期。
【解决方案3】:

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

我能够通过启用消除错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2018-05-18
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多