Javascript Visual Studio 2017:js文件导致许多类型脚本错误

Javascript Visual Studio 2017:js文件导致许多类型脚本错误,javascript,typescript,npm,visual-studio-2017,Javascript,Typescript,Npm,Visual Studio 2017,请参见下面的编辑 我已使用以下软件包作为VS项目的基础-> 在Visual Studio代码中,一切都运行良好,然后我尝试将其转换为Visual Studio 2017项目(node.js web) 现在出现了一些问题 VS似乎将TypeScript定义安装到一个特殊文件夹C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node\u modules\@types 此外,我还将@types/node包含在我的package.json中,从而生

请参见下面的编辑

我已使用以下软件包作为VS项目的基础->

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

现在出现了一些问题

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

此外,我还将@types/node包含在我的package.json中,从而生成了相应的node_modules文件夹

现在VS投诉错误代码TS4090(“节点”的定义冲突)

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

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

编辑

我只是注意到我实际上正在编辑一个.js文件。 当我将扩展名改为.ts时,所有警告和错误都消失了。 在将扩展名从.js更改为.ts之前,我还遇到了很多类型脚本错误(比如TS2307,找不到模块'@angular/core')

文件刚刚导入(从节点)

谁能解释一下我为什么会犯这个错误? 为什么一个JS文件会导致200多个typescript错误(有些似乎与上面的导入无关)

编辑2 发生的错误是

  • TS2403-后续变量声明必须具有相同的类型
  • TS2300-重复标识符“PropertyKey”
  • TS4090-发现“节点”的定义冲突(解释:在
    /node\u modules
    C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node\u modules\@types
所有错误都是由
C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node\u modules\@types
C:\Program files(x86)\Microsoft visualstudio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts中的

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

  • 用微软的方式做
  • 以某种方式排除MS目录

安装到
C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node\u modules\@types
的定义文件仅用于提供JavaScript智能感知。如果您的项目中有TypeScript或项目配置了
tsconfig.json
,则需要获取自己的
.d.ts
文件并将其存储在您的幸运的是,这个项目在
package.json
中已经包含了您所需要的所有.d.ts文件,一个简单的
npm安装就可以了

我可以告诉您,与“node”冲突的定义可能是由于node.d.ts文件有两个副本。如果您自己手动安装了一个,并且安装在projects
package.json
中包含的一个副本之上,则会出现这些错误

我不确定您在JavaScript文件中遇到的TS错误。您能给我看一个错误示例和导致错误的代码片段吗

此外,您可能不希望与MSBuild集成,因为此项目已设置为使用npm脚本+Web包运行。您应该签出此插件:

最后,我认为您不想进入Node.js web项目。对于此项目,您最好只在VS中打开文件夹。要做到这一点,只需使用
File>Open>folder…
并导航到根文件夹。这将为您提供所需的所有编辑工具,而无需任何MSBuild或VS项目结构roject并不是为了利用这些特性而设计的,现在忽略它们可能会更容易


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

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

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

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

我仍然无法100%地了解Visual Studio错误窗口中发生了什么,因为我仍然会收到零星的不合理错误(我知道这一点,因为我仍然可以编译)。我知道Visual Studio TypeScript语言服务控制Visual Studio IDE中的错误和intellisense,它与特定版本的TypeScript(VS 2017中的2.1)相关联。这些错误总是会在VS 2015和现在的VS 2017中造成问题。我认为这归结于极度没有文档记录的TypeScript虚拟项目的内部工作,我仍然没有找到目的

以下链接非常有用:

这是一个与

我能够通过启用


这很有趣。我刚刚检查了它。当我将它用作JS文件并跳转到“fs”的定义时,我在
C:\Users\MyUse中找到了它
import * as fs from 'fs';