微軟釋放了TypeScript 2.0的發布候選版本,包含了tagged union功能以及對globs的支持。
在微軟博客的聲明中,TypeScript的項目主管Daniel Rosenwasser這樣說到:
“這個RC版本能夠幫助我們了解完整的2.0版本會是什么樣子,我們正在尋求廣泛的反饋,使其更加穩定,從而讓2.0成為一個可靠的發布版本。整體而言,對于通常的使用來說,這個RC版本足夠穩定,從這個時間點開始,我們不會再添加重要的新特性了。”
其實,從2.0 beta版本發布到現在,有很多新內容添加了進來。
在TypeScript的發布候選版本中,最重要的更新之一就是tagged union。
Rosenwasser說到,“借助tagged union功能,我們能夠按照現在編寫JavaScript的模式,更加容易地實現類型安全性”。在這個領域,JavaScript可能已經落后于像F#、Swift和Rust這樣的語言,通過tagged union,TypeScript能夠基于kind域來識別類型,如下所示:
function getArea(shape: Shape) { switch (shape.kind) { case "circle": //從'Shape'轉換為'Circle' let c = shape as Circle; return Math.PI * c.radius ** 2; case "square": //從'Shape'轉換為'Square' let sq = shape as Square; return sq.sideLength ** 2; }}該特性是針對TypeScript 1.8的功能增強,在1.8版本中需要對shape中的每個類型進行類型斷言。(以上的樣例是針對1.8版本的,針對2.0版本的完整樣例可以參考微軟的發布聲明。——譯注)
這個發布版本還支持globs,進一步擴展了TypeScript 1.6的exclude域。TypeScript 2.0允許開發人員為路徑編寫通配符,Rossenwasser說這可以是任意粒度的,它們可以用在新增的include域上,也可以用在已有的exclude域中,如下所示:
{ "include": [ "./src/**/*.ts" ], "exclude": [ "./src/tests/**" ]}TypeScript 2.0發布候選版本需要使用Microsoft Visual Studio 2015 Update 3,這個版本解決了多項有較大影響的bug,包括“在調試Visual C++或CLI代碼時,提升了調試的穩定性”,另外,還解決了“在std::min/std::max這樣代碼調用函數中,針對浮點值使用時,可能會出現的錯誤編譯(miscompilation)問題。”
開發社區對這個RC版本總體上是很樂觀的。在Reddit上,Vheissu_這樣說到,“對TypeScript而言,這是一個巨大的飛躍。現在,已經不可能回到簡單原始的ECMAScript上了。”
用戶cspotcode問了這樣一個問題:
lib.dom.d.ts的Node.nodeType域會升級到discriminated unions嗎?這會不會讓當前的類型變得太混亂?看上去,如果Node.nodeType依然是一個number的話,那么Element.nodeType就不能是數字的字面量,因為這會違背Element擴展Node這一前提。Node應該需要重寫,使其成為一個union類型,而不是接口。
Rossenwasser這樣進行了答復:
這是完全有可能的——你可以將所有返回Node的地方都想象為返回新的類型,這個新類型代表了一個union。目前,對我來言,擴展Node的語義是什么尚不清晰,但是如果你有什么想法的話,我們會認真傾聽!你盡可以對此開一個issue。
當問及開發人員何時可以等到2.0的最終版時,Rossenwasser大致估算為“幾周之后“,但是他又說不要嚴格以此為準。
查看英文原文:Microsoft Releases TypeScript 2.0 RC