get topLeft() { return this._topLeft; }
set topLeft(value) { this._topLeft = value; Recalc(); }
上面的代码可以在 TypeScript Play 中找到,但是在从 Visual Studio 2012 编译时收到构建错误error "exited with code 1"
有人尝试在 TypeScript 中获取、设置并成功构建吗?
get topLeft() { return this._topLeft; }
set topLeft(value) { this._topLeft = value; Recalc(); }
上面的代码可以在 TypeScript Play 中找到,但是在从 Visual Studio 2012 编译时收到构建错误error "exited with code 1"
有人尝试在 TypeScript 中获取、设置并成功构建吗?
您需要以 ECMAScript v5 为目标,-target ES5
即将参数传递给编译器。这需要在项目文件目标配置中进行设置。
我不知道VS是否有任何用于编辑目标配置的内置机制,所以我只能告诉你如何手动完成。只需打开您的.csproj
项目文件,查找Target
TypeScript 编译器命令所在的节点,然后添加-target ES5
参数。
在我的配置中,它看起来像这样:
<Target Name="BeforeBuild">
<Exec Command=""$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc" -target ES5 @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
</Target>
更新
从 0.8.1.0 版本开始,移除了硬编码的版本依赖项,并添加了对源映射的支持,因此Target
默认情况下节点现在看起来像这样:
<Target Name="BeforeBuild">
<Message Text="Compiling TypeScript files" />
<Message Text="Executing tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
<Exec Command="tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
</Target>
注入target
参数仍然很容易,只需将其放在tsc
or之后$(TypeScriptSourceMap)
:
<Message Text="Executing tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
<Exec Command="tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
从 0.8.2 开始又有了变化。一些常见的 TypeScript 构建内容已从您的 .csproj 移至外部构建文件。像这样:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" />
您的 .csproj 仍然可以通过将它们作为元素包含在构建中来在 TypeScript 构建上设置一些参数。这些元素之一是 ES 版本。该模板为我创建了两组,一组用于调试,一组用于发布:
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<TypeScriptTarget>ES3</TypeScriptTarget>
<TypeScriptIncludeComments>true</TypeScriptIncludeComments>
<TypeScriptSourceMap>true</TypeScriptSourceMap>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<TypeScriptTarget>ES3</TypeScriptTarget>
<TypeScriptIncludeComments>false</TypeScriptIncludeComments>
<TypeScriptSourceMap>false</TypeScriptSourceMap>
</PropertyGroup>
为了获得想要的效果,只需将 ES3 更改为 ES5
要更深入地了解这最终如何作为对 TypeScript 编译器的调用的一部分,请查看 Microsoft.TypeScript.targets 文件。
祝你好运,