2016-12-15 79 views
4

我寫的用角2和打字稿的應用程序。我想用一個js方法(特別是「過濾器」的陣列),它支持IE 11+,鉻45+等 將我的代碼能夠在舊的瀏覽器上運行?當Typescript轉換爲vanilla js時,我不確定它如何處理ES6功能。Typescript轉換是否將ES6轉換爲ES5?

+0

http://www.typescriptlang.org/play/index.html – Sasxa

+1

['Array.filter()'](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux /陣列/過濾器)與IE 9+和所有其他瀏覽器兼容。它不是用ES6 – nicovank

+1

請注意,這種方法可以通過polyfills加入,也介紹;你不一定需要翻譯。 – jonrsharpe

回答

9

TypeScript允許您使用來自ES6的新的語言功能,它會將這些語言功能轉換爲ES5;但是,它不添加內置存在於ES6功能爲polyfills,但在ES5不存在。

如果您使用的是內置的,只有在ES6存在,並都瞄準ES5功能,那麼你將需要包括爲了必要的polyfills爲代碼在ES5環境中工作。

例如,fillArray的原型在ES6發現了一個新的功能。

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

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

當你的目標ES5,但是,它不包括lib.es6.d.ts並會告訴你,這個功能並沒有在ES5環境中存在:

錯誤TS2399:房產「填充'在類型'string []'上不存在。

爲了解決這個問題,你需要添加fillArray<T>接口的定義文件在您的項目:

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

,包括一個polyfill。或者使用自動爲你做的事情。

0

是的,它可以的,如果你設置tsconfig.json目標ES5

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

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