Настроить вывод компилятора Typescript

Мне нужна помощь в настройке вывода компилятора машинописного текста, или, если быть более точным, если это вообще возможно.

У меня есть фреймворк openui5, синтаксис которого, например расширение классов, сильно отличается от стандартов ES5+. Также AMD работает по-другому.

Вот пример:

Я хотел бы импортировать модуль. В машинописном тексте должно быть:

import { Button } from "sap/m/Button";

который выводит что-то вроде этого в javascript:

var Button = require("sap/m/Button");

Но вот что мне нужно:

var Button = sap.ui.require("sap/m/Button");

Другой пример:

Свойства разрешаются с помощью функций получения и установки. Поэтому, когда вы расширяете класс, вы можете дать ему объект json со свойствами:

properties: {
   "title" : "string",                         // a simple string property, default value is undefined
   "buttonText" : {defaultValue: "Search"},    // when no type is given, the type is string
   "showLogoutButton" : {type : "boolean", defaultValue : true},   // a boolean property where a default value is given
   "width" : {type : "sap.ui.core.CSSSize", defaultValue : "50px"} // a CSS size property where a default value is given
}

теперь openui5 возьмет данное свойство и сгенерирует сеттеры. Например, для свойства title будут сгенерированы две функции:

getTitle();
setTitle(value);

Но нет свойства ES 5.

Итак, в typescript вы не можете получить доступ к своей собственности следующим образом:

пусть мой класс = новый MyClass(); myclass.title = "Привет, мир";

но вам придется использовать методы getter и setter:

пусть мой класс = новый MyClass(); myclass.setTitle («Привет, мир»);

Что я хотел бы сделать здесь, так это написать этот машинописный код:

let myclass = new MyClass();
myclass.title = "Hello World";

который транспилируется в этот код javascript:

let myclass = new MyClass();
myclass.setTitle("Hello World");

Я думаю, что могу сделать это в своих классах с помощью декораторов, но вы не можете использовать декораторы в файлах объявлений (d.ts). Поэтому я не могу использовать базовые классы таким образом.

Вот мой вопрос:

Можно ли расширить транспилятор машинописного текста и заставить его компилировать этот материал по-другому?

Толчок в правильном направлении был бы высоко оценен.


person Hans Bäuml    schedule 15.06.2017    source источник
comment
Это действительно звучит так, как будто вы хотите дождаться новой версии openui5.   -  person    schedule 16.06.2017
comment
Планируется ли приблизиться к стандартам ЕС?   -  person Hans Bäuml    schedule 16.06.2017
comment
Понятия не имею, вам придется свериться с их дорожной картой, которую практически невозможно найти, даже если она существует, поскольку, по-видимому, есть виджет под названием «Дорожная карта».   -  person    schedule 16.06.2017


Ответы (1)


Вы можете сделать свой собственный транспилятор.

  1. путем расширения исходных кодов TypeScript
  2. скриптом с использованием TypeScript Language Service (документы TSLS) и Compiler API (документы Compiler API), вы можете обрабатывать скрипты и создавать собственные транспилятор простым способом.
  3. писать код, как того требует фреймворк.
person Misaz    schedule 16.06.2017
comment
Спасибо за этот ответ. Я прочитал API компилятора. Итак, вот дополнительный вопрос: если я расширим компилятор ts, мне придется развернуть исходники и запустить его, например, через gulp. Нет возможности как-то привязать скрипты к машинописному компилятору? - person Hans Bäuml; 16.06.2017
comment
Думаю это невозможно. Вы можете написать свой собственный компилятор, который обновляет исходники, а затем вызывает обычный компилятор. - person Misaz; 16.06.2017
comment
Ок, отлично. Поскольку я хочу включить его в расширение vscode, я думаю, что смогу это сделать. Большое спасибо за Вашу помощь. Я посмотрю на API компилятора. - person Hans Bäuml; 16.06.2017
comment
Если вы знаете лучший способ, не стесняйтесь опубликовать его, я отмечу его как ответ или расскажу нам, почему вы думаете, что это нереально или плохо. На данный момент это подтолкнуло меня в правильном направлении. Я всегда благодарен за любую конструктивную помощь. - person Hans Bäuml; 16.06.2017