如何評價 TypeScript 1.7?
Announcing TypeScript 1.7
async / await 終於來了,最近在用 typescript + express 寫node,用了async/await 後的代碼大概長這樣:
沒有質變。
async/await會編譯成yield/generator加一個__awaiter函數,這個__awaiter函數和co原理是一樣的,這種方式在目前支持yield/generator的JS環境下是最合適的async/await實現了,如果以ES5為編譯目標,生成的代碼量會巨大,而且對人完全是不可讀的。所以我個人不傾向於在ES5環境當中使用async/await。
編譯目標設置為ES6的時候,可以使用ES6的module/import語法,對於以export default的模塊,個人認為用起來會顯得不太方便,並且還有一個小小的bug,這裡就先不詳細描述了。不論怎樣,擁抱ES6肯定是趨勢。
一個不知道是不是1.7才引入的問題:以ES6為編譯目標時,某些d.ts會用不了,比如bluebird,因為TS的lib.es6.d.ts里定義了Promise,而bluebird.d.ts也定義了,於是重複定義。當然這種問題可以等第三方庫的d.ts更新,或者自己修改一下兼容,不過我目前用的是很猥瑣的辦法就是自己改了一個lib.es6.d.ts,把裡面Promise的定義全刪了- -"。
npm install typescript@next的話,可以嘗鮮體驗到1.8,不過還是有不少BUG……最近有在跟進翻譯 TypeScript 項目 wiki 里的 what"s new, 有需要的同學可以查看 TypeScript 新增特性一覽.
1.7 相對而言並沒有增加很多新的東西, async/await 其實 1.6 的時候就已經有了, 只是之前需要添加選項. 比較重要, 或者比較有意義的更新主要有兩個.
第一個是編譯目標為 ES6 時也可以指定模塊方案, 然而這只是個過渡, 未來很多功能更夠拆分開來配置是否輸出 polyfill, 離 (主要使用 TypeScript 的開發者) 告別 Babel 也就越近了.
第二個是 this 類型, 對於喜歡鏈式調用的同學來說是一大福音, 也為其他場景提供了更多的靈活性.
除開這兩個, 對對象/數組的字面量解構推導也更方便易用, 可以少一些冗餘.
總體來說, 1.7 帶來的特性並不是很多, 其實在 1.6 發布後不久, 1.8 就已經和 1.7 在同時進行開發.
--
另外至於 TypeScript 尚未支持 async/await 編譯到 ES5, 主要原因有兩點:
1. 會影響編譯速度.2. 生成的代碼幾乎不可讀, 難以調試.都說 TypeScript 是 Babel 的競爭對手,但是這一次,如果你想在 TypeScript 里用 async/await,你得用 TypeScript 編譯成 ES6,然後再用 Babel 編譯成 ES5
無論是什葉派的typescript 還是遜尼派的coffeescript 都無法阻止原教旨的es崛起
推薦閱讀:
※npm、bower、jamjs 等包管理器,哪個比較好用?
※js 數組賦值問題 :值傳遞還是引用?
※在自學前端,但是沒有什麼實踐的資源,大家來推薦一下論壇或者別的可供練習的資源吧?
※JS立即執行如何使用?還是說圓括弧本身是用來改變JS的執行上下文環境?
※js 中,不使用數組,不使用對象,可以 return 多組值嗎?
TAG:JavaScript | TypeScript |