请参阅下面的编辑
我使用以下软件包作为我的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 发生的错误是
./node_modules
和C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types
中找到所有错误都是由d.ts
或C:\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文件时。
所以解决方案可能是:
答案 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://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types
答案 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)