2017-02-06 7 views
1

TypeScript ist eine strenge Obermenge von ECMAScript 2015 und hat bereits eine Decorator-Unterstützung. Bedeutet dies, dass mit der Einführung von ECMAScript 2016-Dekoratoren TypeScript-Dekoratoren überflüssig werden oder bedeutet das, dass TypeScript seine zugrunde liegende Implementierung ändern muss, um ECMAScript 2016-Dekoratoren zu erzeugen?Machen ECMAScript-Dekoratoren TypScript-Dekoratoren überflüssig?

+1

Solange 90% der Zeit, die Sie ES5 generieren, interessieren Sie sich nicht wirklich ... Sowohl es2016 als auch Typescript werden in etwas anderes umgewandelt werden – smnbbrv

+0

true, aber ich spreche über die Zeit, wenn Typoskript nicht mehr generiert ES5. – ishandutta2007

+2

Dekorierer sind kein Bestandteil von ES2016. –

Antwort

4

Wie es heißt, in den docs regarding decorators:

Dekorateure sind eine experimentelle Funktion, die

in Zukunft Versionen ändern kann

Typoskript können Sie zukünftige Funktionen nutzen, die noch nicht in allen js umgesetzt werden Umgebungen durch Kompilieren der Ausgabe in js, die der Zielumgebung entspricht.

So zum Beispiel diese:

function deco(constructor: Function) { } 

@deco 
class A { } 

Compiliert in:

var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 
    return c > 3 && r && Object.defineProperty(target, key, r), r; 
}; 
function deco(constructor) { } 
var A = (function() { 
    function A() { 
    } 
    return A; 
}()); 
A = __decorate([ 
    deco 
], A); 

Wie Sie die js Version enthält alles sehen kann, die erforderlich ist, damit es funktioniert.
Wenn sich etwas ändert, dann ja, der Compiler ändert sich, um die richtige js auszugeben.

+0

Siehe Ich verstehe kein bisschen von dem generierten Code '__decorate', wenn die Underling-Implementierung für transpiler geändert wird, würde Code definitiv für Leute wie mich lesbarer werden, obwohl nicht sicher, dass reablity überhaupt ein Grundsatz des transpilers ist und thay würde es vorziehen, weiterhin den gleichen Weg zu generieren, bis etwas kaputt geht. – ishandutta2007

+3

Die kompilierte js soll nicht lesbar sein, es soll arbeiten und so wenig Fußabdruck wie möglich haben. Sie sollten die kompilierte js nicht selbst ändern, und Sie sollten darauf vertrauen, dass der Compiler den richtigen Code basierend auf dem von Ihnen angegebenen Ziel ausgibt. –

+1

@ ishandutta2007 Ich denke, was Sie fragen ist, ob TS Dekorateure schließlich zu ES Dekoratoren kompilieren werden. Das ist eine faire Frage, ich glaube nicht, dass wir die Antwort darauf wissen, aber ich würde erwarten, dass dies wahrscheinlich ist. Es gibt bereits 'ES2016, ES2017, ESNext' Ziele, aber ich weiß nicht, ob der Compiler für diese Ziele (noch) ES-Dekorierer ausgibt, noch weiß ich, ob sie zu diesem Zeitpunkt überhaupt kompatible Spezifikationen sind. Ich würde das auch gerne wissen! – Aaron

Verwandte Themen