Компиляция кода ошибки TypeScript с настройкой get "exited with code 1"

get topLeft()      { return this._topLeft;             }

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

Вышеупомянутый код работает в TypeScript Play, но я получил ошибку сборки при компиляции из Visual Studio 2012 error "exited with code 1"

Кто-нибудь пытается получить, установить в TypeScript и успешно построить?

Ответ 1

Вам нужно настроить таргетинг на ECMAScript v5, т.е. передать аргумент -target ES5 компилятору. Это необходимо установить в целевой конфигурации файлов проекта.

Я не знаю, имеет ли VS какой-либо встроенный механизм для редактирования целевых конфигураций, поэтому я могу только сказать вам, как это сделать вручную. Просто откройте файл проекта .csproj, найдите Target node, где находится команда компилятора TypeScript, и добавьте аргумент -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 node теперь выглядит по умолчанию:

<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 по-прежнему довольно прост, просто введите его после tsc или $(TypeScriptSourceMap):

<Message Text="Executing tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
<Exec Command="tsc --target ES5 $(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />

Ответ 2

По состоянию на 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.

Удачи,