微軟發(fā)布TypeScript 2.0 RC版本

責(zé)任編輯:editor006

作者:James Chesters

2016-09-09 16:20:41

摘自:INFOQ

微軟釋放了TypeScript 2 0的發(fā)布候選版本,包含了tagged union功能以及對(duì)globs的支持。——譯注)  這個(gè)發(fā)布版本還支持globs,進(jìn)一步擴(kuò)展了TypeScript 1 6的exclude域。

微軟釋放了TypeScript 2.0的發(fā)布候選版本,包含了tagged union功能以及對(duì)globs的支持。

在微軟博客的聲明中,TypeScript的項(xiàng)目主管Daniel Rosenwasser這樣說(shuō)到:

“這個(gè)RC版本能夠幫助我們了解完整的2.0版本會(huì)是什么樣子,我們正在尋求廣泛的反饋,使其更加穩(wěn)定,從而讓2.0成為一個(gè)可靠的發(fā)布版本。整體而言,對(duì)于通常的使用來(lái)說(shuō),這個(gè)RC版本足夠穩(wěn)定,從這個(gè)時(shí)間點(diǎn)開(kāi)始,我們不會(huì)再添加重要的新特性了。”

其實(shí),從2.0 beta版本發(fā)布到現(xiàn)在,有很多新內(nèi)容添加了進(jìn)來(lái)。

在TypeScript的發(fā)布候選版本中,最重要的更新之一就是tagged union。

Rosenwasser說(shuō)到,“借助tagged union功能,我們能夠按照現(xiàn)在編寫(xiě)JavaScript的模式,更加容易地實(shí)現(xiàn)類(lèi)型安全性”。在這個(gè)領(lǐng)域,JavaScript可能已經(jīng)落后于像F#、Swift和Rust這樣的語(yǔ)言,通過(guò)tagged union,TypeScript能夠基于kind域來(lái)識(shí)別類(lèi)型,如下所示:

function getArea(shape: Shape) { switch (shape.kind) { case "circle": //從'Shape'轉(zhuǎn)換為'Circle' let c = shape as Circle; return Math.PI * c.radius ** 2; case "square": //從'Shape'轉(zhuǎn)換為'Square' let sq = shape as Square; return sq.sideLength ** 2; }}

該特性是針對(duì)TypeScript 1.8的功能增強(qiáng),在1.8版本中需要對(duì)shape中的每個(gè)類(lèi)型進(jìn)行類(lèi)型斷言。(以上的樣例是針對(duì)1.8版本的,針對(duì)2.0版本的完整樣例可以參考微軟的發(fā)布聲明。——譯注)

這個(gè)發(fā)布版本還支持globs,進(jìn)一步擴(kuò)展了TypeScript 1.6的exclude域。TypeScript 2.0允許開(kāi)發(fā)人員為路徑編寫(xiě)通配符,Rossenwasser說(shuō)這可以是任意粒度的,它們可以用在新增的include域上,也可以用在已有的exclude域中,如下所示:

{ "include": [ "./src/**/*.ts" ], "exclude": [ "./src/tests/**" ]}

TypeScript 2.0發(fā)布候選版本需要使用Microsoft Visual Studio 2015 Update 3,這個(gè)版本解決了多項(xiàng)有較大影響的bug,包括“在調(diào)試Visual C++或CLI代碼時(shí),提升了調(diào)試的穩(wěn)定性”,另外,還解決了“在std::min/std::max這樣代碼調(diào)用函數(shù)中,針對(duì)浮點(diǎn)值使用時(shí),可能會(huì)出現(xiàn)的錯(cuò)誤編譯(miscompilation)問(wèn)題。”

開(kāi)發(fā)社區(qū)對(duì)這個(gè)RC版本總體上是很樂(lè)觀的。在Reddit上,Vheissu_這樣說(shuō)到,“對(duì)TypeScript而言,這是一個(gè)巨大的飛躍?,F(xiàn)在,已經(jīng)不可能回到簡(jiǎn)單原始的ECMAScript上了。”

用戶cspotcode問(wèn)了這樣一個(gè)問(wèn)題:

lib.dom.d.ts的Node.nodeType域會(huì)升級(jí)到discriminated unions嗎?這會(huì)不會(huì)讓當(dāng)前的類(lèi)型變得太混亂?看上去,如果Node.nodeType依然是一個(gè)number的話,那么Element.nodeType就不能是數(shù)字的字面量,因?yàn)檫@會(huì)違背Element擴(kuò)展Node這一前提。Node應(yīng)該需要重寫(xiě),使其成為一個(gè)union類(lèi)型,而不是接口。

Rossenwasser這樣進(jìn)行了答復(fù):

這是完全有可能的——你可以將所有返回Node的地方都想象為返回新的類(lèi)型,這個(gè)新類(lèi)型代表了一個(gè)union。目前,對(duì)我來(lái)言,擴(kuò)展Node的語(yǔ)義是什么尚不清晰,但是如果你有什么想法的話,我們會(huì)認(rèn)真傾聽(tīng)!你盡可以對(duì)此開(kāi)一個(gè)issue。

當(dāng)問(wèn)及開(kāi)發(fā)人員何時(shí)可以等到2.0的最終版時(shí),Rossenwasser大致估算為“幾周之后“,但是他又說(shuō)不要嚴(yán)格以此為準(zhǔn)。

查看英文原文:Microsoft Releases TypeScript 2.0 RC

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)