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

时间:2017-03-20 14:33:56

标签: javascript typescript npm visual-studio-2017

请参阅下面的编辑

我使用以下软件包作为我的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('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多个打字稿错误(有些甚至看起来与上面的导入无关)?

EDIT2 发生的错误是

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

所有错误都是由d.tsC:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types

中的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 Way方式进行
  • 以某种方式排除MS目录

3 个答案:

答案 0 :(得分:1)

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

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

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

我仍然无法弄清楚100%Visual Studio Errors窗口中发生了什么,因为我仍然得到零星的不合理错误(我知道这是因为我仍然可以编译)。我知道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

答案 1 :(得分:0)

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

我可以告诉你,与'node'冲突的定义很可能是因为有了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项目结构。考虑到这个项目不是为了利用任何这些功能而设计的,现在暂时忽略它们可能会更容易。

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

答案 2 :(得分:0)

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

中的一个BUG

我能够通过启用来消除错误

enter image description here