2017-02-02 3 views
9

Unten ist mein tsconfig.json Datei, wo ich Ziel „ES5“ eingestellt haben und das Modul auf „es6“Verstehen „Ziel“ und „Modul“ in TSconfig

{ 
    "compilerOptions": { 
    "target": "es5",  
    "module": "es6" 
    } 

} 

Meine Frage, weil Module [Import/export] sind Teil von es6 und NICHT es5, der eingelesene JavaScript-Code sollte keine Import/Export-Anweisungen enthalten. Aber der Javascript-Code, der generiert wird, hat Import/Export-Anweisungen, obwohl das Ziel es5 ist, wie ist es möglich?

+2

Es ist möglich, weil [sie beschlossen, es so zu implementieren] (https://github.com/Microsoft/TypeScript/pull/9042), [hier sind einige Gründe warum] (https://github.com/Microsoft/TypeScript/issues/6319) – artem

Antwort

16

Das Modulsystem ist unabhängig von der Sprachimplementierung. ES6 (ES2015) -Module verwenden die Import/Export-Syntax, und es liegt an dem Modullader, dies zu interpretieren.

Hier haben Sie mit dem Modulsystem ES2015 festgelegt, dass die Syntax des ES6-Moduls aktiviert wird.

Das Javascript selbst kann auf ES5 abzielen und nur ES5-Funktionen verwenden. Es ist jedoch theoretisch möglich, einen Modullader mit diesem Code zu verwenden, der mit der ES2015-Modul-Syntax arbeitet. Obwohl es möglich ist, ist es nicht unbedingt etwas, was Sie tun möchten. Es ist häufiger, CommonJS- oder AMD-Module mit ES5-Javascript zu verwenden.

Anscheinend war diese Kombination vor Typescript 2.0 nicht einmal erlaubt. In den Typescript 2.0-Versionshinweisen heißt es:

"Zuvor als ungültige Flag-Kombination gekennzeichnet, werden jetzt Ziel: es5 und 'modul: es6' unterstützt. Dies sollte die Verwendung von ES2015-basierten Baum-Shakern wie Rollup erleichtern."