簡體   English   中英

Typescript轉換是否可以將ES6轉換為ES5?

[英]Does Typescript transpilation handle transpiling ES6 to ES5?

我正在使用Angular 2和TypeScript編寫應用程序。 我想使用IE 11 +,Chrome 45+等支持的js方法(尤其是數組的'過濾器')。我的代碼是否可以在舊版瀏覽器上運行? 由於Typescript轉換為vanilla js,我不確定它對ES6功能的作用。

TypeScript允許您使用ES6中的新語言功能 ,它會將這些語言功能轉換為ES5; 但是,它不會為ES6中存在的內置函數添加polyfill,但在ES5中不存在。

如果您使用的是僅存在於ES6中且面向ES5的內置函數,則需要包含必要的polyfill,以使代碼在ES5環境中工作。

例如, fill是在ES6中Array的原型中找到的新函數。

const result = ["first", "second"].fill("all");

當你瞄准ES6時一切都很好。 編譯器將包含lib.es6.d.ts以及fill的定義而不是抱怨,因為它假定您將在存在fill函數的ES6環境中運行代碼。

但是,當您定位ES5時,它將不包含lib.es6.d.ts並且會告訴您ES5環境中不存在該功能:

錯誤TS2399:類型'string []'上不存在屬性'fill'。

要解決此問題,您需要在項目的定義文件中向Array<T>接口添加fill

interface Array<T> {
    fill(value: T, start?: number, end?: number): this;
}

並包括一個polyfill 或者使用自動為您做的事情。

是的,如果您將tsconfig.json設置為目標ES5,則可以

設置target: "ES5" tsconfig.json編譯器選項中的target: "ES5"--target ES5 for CLI

至於ES6,IDK的內置功能,但我會將babel-loader添加到webpack,grunt,gulp等,以自動填充這些功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM