2017-06-15 5 views
0

Ich brauche etwas Hilfe bei der Anpassung der Compiler-Ausgabe von Typoskript, oder um genauer zu sein, wenn es überhaupt möglich ist.Customize Typescript Compiler-Ausgabe

Ich habe das openui5 Framework, dessen Syntax, zum Beispiel die Erweiterung von Klassen, stark von ES5 + Standards abweicht. Auch AMD funktioniert anders. Hier

ist ein Beispiel:

Ich mag würde ein Modul importieren. In Typoskript sollte es sein:

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

, die so etwas wie dies in Javascript setzt heraus:

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

Aber was ich brauche hier:

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

Ein weiteres Beispiel:

Eigenschaften werden mit Getter- und Setter-Funktionen aufgelöst. Also, wenn Sie eine Klasse erweitern können Sie es geben ein JSON-Objekt mit den Eigenschaften:

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 
} 

jetzt nehmen openui5 die gegebene Eigenschaft und die Setter generieren. Zum Beispiel werden für die "title" -Eigenschaft die zwei Funktionen erzeugt:

getTitle(); 
setTitle(value); 

Aber keine ES 5 -Eigenschaft.

in Typoskript So können Sie nicht Ihre Eigenschaft wie folgt zugreifen:

let myclass = new MyClass(); myclass.title = "Hallo Welt";

aber Sie werden die Getter und Setter-Methoden verwenden:

let myclass = new MyClass(); myclass.setTitle ("Hallo Welt");

Was würde Ich mag hier zu tun ist, um diesen Typoskript Code zu schreiben:

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

, die zu diesem Javascript-Code transpiles:

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

Ich glaube, ich kann diese Dekorateure mit auf meinen Klassen zu tun , aber Deklaratoren können nicht in Deklarationsdateien (D.ts) verwendet werden. Daher kann ich die Basisklassen nicht auf diese Weise verwenden.

So, hier ist meine Frage:

Ist es möglich, das Typoskript Transpiler zu erweitern und sagen, dass es das Zeug anders zu kompilieren?

Ein Schub in die richtige Richtung würde sehr geschätzt werden.

+0

Es klingt wirklich wie das, was Sie wollen, ist für eine neue Version von openui5 zu warten. –

+0

Gibt es Pläne, sich den ES-Standards zu nähern? –

+0

Keine Ahnung, du müsstest ihre Roadmap konsultieren, die fast unmöglich zu suchen ist, selbst wenn sie existiert, da es anscheinend ein Widget namens Roadmap gibt. –

Antwort

1

Sie können Ihren eigenen Transpiler machen.

  1. durch die Erweiterung Typoskript Quellcodes
  2. von Skript TypeScript Language Service (docs TSLS) und Compiler API (docs Compiler API) Sie können Skripte verarbeiten und eigene Transpiler durch einfache Art und Weise zu bauen.
  3. schreiben Sie Code als Framework erfordert.
+1

Danke für diese Antwort. Ich lese den Compiler api durch. Hier ist eine weitere Frage: Wenn ich den ts-Compiler erweitere, müsste ich die Quellen bereitstellen und zum Beispiel durch gulp laufen lassen. Es gibt keine Möglichkeit, Skripte etwas an den Typskript-Compiler anzuhängen. –

+0

Ich denke, es ist unmöglich. Sie können einen eigenen Compiler schreiben, der Quellen aktualisiert und dann den normalen Compiler aufruft. – Misaz

+0

Ok, großartig. Da ich es in eine vscode-Erweiterung aufnehmen möchte, denke ich, dass ich das möglich machen kann. Vielen Dank für Ihre Hilfe. Ich werde mir die Compiler-API ansehen. –