2017-07-17 88 views
2

我用的打字稿及的WebPack也用巴貝爾玩完編譯註意到一些網絡項目的一些項目。例如,他們使用ts編譯爲ES2015,然後使用babel編譯爲es5。爲什麼不直接使用ts直接編譯成es5?爲什麼使用打字稿/的WebPack也用巴貝爾完成編譯

是在項目中也有JS需要進行編譯,以便他們只是用巴貝爾一切的情況下?或者我錯過了什麼?

謝謝。

回答

3

有這幾個可能的原因。

  1. 他們使用的是巴貝爾自動填充工具 - 打字稿僅執行語法轉換,讓用戶找出運行時庫,他們將需要大約(例如PromiseSymbol等)。這可以讓你決定這些polyfill的哪個實現對你來說最適合,但這可能是一個痛苦。巴別爾免除你考慮這個問題的負擔。這是一個折衷。
  2. 他們需要它的自定義轉換 - 打字稿有變換的管道,但是當你在時間使用打字稿API在這一點上它只是訪問。如果您已經在使用Babel並希望開始使用TypeScript,但您已經在使用轉換,這是一個合理的折衷方案。
  3. 它是當打字稿不支持編譯發電機ES5(甚至回來的時候打字稿不支持ES5 async/await創建 - 自2.1打字稿一直支持ES5 async/await,並支持發電機從2.3開始在downlevelIteration之後。在此之前,用戶通常依靠巴別塔來彌補鬆懈,但巴別爾在這裏不再需要。
  4. 它是在Webpack 2之前創建的,並且該項目使用特定方式導入模塊 - TypeScript有一個allowSyntheticDefaultImport選項,它告訴TypeScript默認導入可用於導入某些模塊。 Babel支持這種行爲,但Webpack直到Webpack 2推出之前都沒有。新版本的Webpack不再需要Babel了。

這可能不是完整的原因,但這是我能想到的一些原因。

0

爲什麼不直接使用TS直接編譯到ES5?

這是我做的。

關於混合巴貝爾和打字稿

有在使用起來都沒有缺陷。既然都這樣做:

(non js OR js) => standard js 

您可以通過做

(non js OR js) => standard js => es5 

無論TS -> JS -babel> ES5Babel -> JS -ts> ES5

之所以人們這樣做是不同的語法支持:https://kangax.github.io/compat-table/

個人

如上所述。我不使用巴貝爾as I TypeSafety is big for me and don't need to use syntax that isn't yet type safe

0

Typescript是從FROM ES2016開始的演變。 Typescript幫助來自c#和java背景的開發人員成爲使用各種工具的JavaScript開發人員。 Visual Studio代碼,WebStorm,崇高等

爲什麼:我們不能單獨使用打字稿轉換TS到ES5 編譯與打字稿到ES5的並不完整,因爲它是與巴貝爾。一些現代語言功能(如Array.prototype.find)無法使用TypeScript編譯爲ES5。

這裏是鏈接,將幫助你:https://www.stackchief.com/blog/TypeScript%20or%20Babel%3F