我怎样才能得到Visual Studio Typescript 1.7 intellisense与nodejs库(angular2,rxjs)?

[已解决]我logging了一个对TypeScript的错误 ,修复应该汇总到下一个VS插件版本。 本质上,如果您指定模块分辨率为“NodeJs”,则可以使智能感知工作。 但编译器不喜欢这个,因为它期望它是“节点”。 它看起来像他们正在做的修复是通过指定“节点”,使一切工作。


我正在尝试使用msbuild构build一个Angular2项目,因为我想使用ASP.Net Web API作为我的后端。 代码编译和运行良好,但我的编辑器(SublimeText 3或Visual Studio 2015)不喜欢我导入Angular2库的方式:

boot.ts:

import {bootstrap} from 'angular2/platform/browser'; // error: cannot find module import {AppComponent} from './app.component'; bootstrap(AppComponent, []); 

如果我使用TypeScript编译器直接使用tsconfig.json和node lite-server作为文档运行相同的示例( Angular2 Hero教程 ),那么SublimeText3可以工作,并且可以很好地识别此语法。 但是,一旦我切换到msbuild,由于某种原因,我得到这个intellisense错误。 以下是我认为相关的其他项目:

文件夹结构:

 \ - index.html - package.json \app - boot.ts - app.component.ts \node_modules \angular2 \platform - browser.js - browser.d.ts 

的package.json:

 { "name": "angular2-webapi", "version": "1.0.0", "scripts": { }, "license": "ISC", "dependencies": { "angular2": "2.0.0-beta.0", "systemjs": "0.19.6", "es6-promise": "^3.0.2", "es6-shim": "^0.33.3", "reflect-metadata": "0.1.2", "rxjs": "5.0.0-beta.0", "zone.js": "0.5.10" }, "devDependencies": { "typescript": "^1.7.3" } } 

csproj文件中的TypeScript编译器部分(其中大部分是从Angular2 Hero教程的 tsconfig文件中复制的,但其中的一部分是由VS自动设置的):

 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <TypeScriptTarget>ES5</TypeScriptTarget> <TypeScriptJSXEmit>None</TypeScriptJSXEmit> <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> <TypeScriptModuleKind>System</TypeScriptModuleKind> <TypeScriptRemoveComments>False</TypeScriptRemoveComments> <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations> <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError> <TypeScriptSourceMap>True</TypeScriptSourceMap> <TypeScriptExperimentalDecorators>true</TypeScriptExperimentalDecorators> <TypeScriptModuleResolution>node</TypeScriptModuleResolution> <TypeScriptEmitDecoratorMetadata>true</TypeScriptEmitDecoratorMetadata> </PropertyGroup> 

我也尝试改变我参考下面的Angular2库的方式,因为它匹配浏览器脚本的实际物理path,但不幸的是,生成的文件由于某种原因不会将“.js”扩展名添加到生成的依赖项列表。 这意味着浏览器将请求文件“browser”而不是“browser.js”。

这打破了运行时间:

 import {bootstrap} from '../node_modules/angular2/platform/browser'; 

我其实不知道如何系统应该知道如何解决'angular2 /平台/浏览器'的语法,但它似乎工作,如果我不使用msbuild。 鉴于这段代码编译和运行正常,它似乎也应该在我的编辑器中工作。 有人有主意吗?

至于项目属性组设置为

 <TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution> 

有一个解决方法是修改Microsoft.Typescript.targets 。 它使编译器工作:

 <TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != ''">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations> 

硬编码为

 <TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != '' and '$(TypeScriptModuleResolution)' != 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations> <TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' == 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution node</TypeScriptBuildConfigurations> 

PS确保采取Microsoft.Typescript.targets的备份

这似乎是@AndrewSorokin描述的打字稿工具中的一个错误,但不是编辑Microsoft.Typescript.targets ,而是覆盖项目文件中的错误代码。 将以下行添加到项目文件的末尾:

 <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- ... --> <!-- Set the Module Resolution mode to be NodeJs as required by intellisense --> <!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr --> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> <TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution> </PropertyGroup> <!-- ... --> <!-- Override the moduleResolution parameter to tsc to overcome a bug in intellisense --> <!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr --> <PropertyGroup> <CompileTypeScriptDependsOn> SpoofTypeScriptModuleResolution; $(CompileTypeScriptDependsOn) </CompileTypeScriptDependsOn> </PropertyGroup> <Target Name="SpoofTypeScriptModuleResolution"> <PropertyGroup> <TypeScriptBuildConfigurations>$(TypeScriptBuildConfigurations.Replace('--moduleResolution NodeJs', '--moduleResolution node'))</TypeScriptBuildConfigurations> </PropertyGroup> <Message Text="Options: $(TypeScriptBuildConfigurations)" /> </Target> </Project>