2017-08-04 1 views
0

Ich habe ein Projekt mit Javascript Codebasis. Ich möchte anfangen, mich allmählich auf Typoskript umzustellen und auch sicherzustellen, dass der vorhandene JavaScript-Code auf ES5-Niveau bleibt. I.e. Stellen Sie sicher, dass ES6-Funktionen auf ES5 übertragen werden.Typescript-Ziel nicht Auswirkungen Quell-Javascript-Dateien (mit allowJs)?

Ich dachte, dass dies gelöst werden könnte, indem nur TSC in die Baukette eingeführt wird. Die Datei tsconfig.json hat ein Ziel für ES5, und tsc ist so eingestellt, dass sie beide Typoskript- und JavaScript-Dateien verarbeitet.

Aber apparently TSC nicht Javascript-Dateien auf ES5-Ebene transpilieren. Oder fehlt mir etwas in meinem Setup?

Meine Vermutung ist, dass ich noch Babel für die Build-Kette hinzufügen muss, um sicherzustellen, dass der gesamte Code, der im Browser ausgeführt wird, auf ES5-Ebene ist.

Einfaches Beispiel unter:

tstest.js containg ES6 Merkmal:

var arr = ["a", "b", "c"]; 
console.log(arr.includes("b")); 

Transpiling geschieht nicht für javascript:

/tmp> tsc -t ES5 -allowJs -outDir ./transpiled tstest.js 
/tmp> cat transpiled/tstest.js 
var arr = ["a", "b", "c"]; 
console.log(arr.includes("b")); 
+0

Haben Sie das ES7 lib in Ihre TSconfig-Datei hinzugefügt? Nach diesem Thread: https://github.com/Microsoft/TypeScript/issues/2340 müssen Sie die Bibliothek "es7" und "dom" einschließen. Wenn Sie diese hinzugefügt haben, fügen Sie bitte die tsconfig-Datei in Ihre Frage ein. – hagner

+0

TypeScript fügt kein Polyfill hinzu. Sie müssen in Ihrem Projekt das Polyfill Ihrer Wahl für 'includes' hinzufügen. – Paleo

+0

@hagner, ich habe jetzt auch versucht, lib-definitionen hinzuzufügen, aber es hat immer noch keine transpilation gemacht. Ich denke die libs werden für .ts Dateien benötigt und was dort erlaubt ist – iaarnio

Antwort

0

es jetzt herausgefunden haben. Array.includes in ES2016 feature und wurde daher nicht transpiliert. Z.B. Pfeil-Funktionen sind corrently zu ES5 Ebene auch in Javascript Quellen transpiled:

/tmp> cat tstest.js 
const f = a => 2 * a; 
console.log(f(5)); 

Ergebnisse nach tsc:

/tmp> tsc -t ES5 -allowJs -outDir ./transpiled tstest.js 
/tmp> cat transpiled/tstest.js 
var f = function (a) { return 2 * a; }; 
console.log(f(5));