13
get topLeft()      { return this._topLeft;             }

set topLeft(value) {  this._topLeft = value; Recalc(); }

上面的代码可以在 TypeScript Play 中找到,但是在从 Visual Studio 2012 编译时收到构建错误error "exited with code 1"

有人尝试在 TypeScript 中获取、设置并成功构建吗?

4

2 回答 2

19

您需要以 ECMAScript v5 为目标,-target ES5即将参数传递给编译器。这需要在项目文件目标配置中进行设置。

我不知道VS是否有任何用于编辑目标配置的内置机制,所以我只能告诉你如何手动完成。只需打开您的.csproj项目文件,查找TargetTypeScript 编译器命令所在的节点,然后添加-target ES5参数。

在我的配置中,它看起来像这样:

<Target Name="BeforeBuild">
    <Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc&quot; -target ES5 @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
</Target>

更新

从 0.8.1.0 版本开始,移除了硬编码的版本依赖项,并添加了对源映射的支持,因此Target默认情况下节点现在看起来像这样:

<Target Name="BeforeBuild">
    <Message Text="Compiling TypeScript files" />
    <Message Text="Executing tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
    <Exec Command="tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
</Target>

注入target参数仍然很容易,只需将其放在tscor之后$(TypeScriptSourceMap)

<Message Text="Executing tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
<Exec Command="tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
于 2012-10-07T17:07:06.453 回答
9

从 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 文件。

祝你好运,

于 2013-03-04T12:17:35.060 回答