微軟發佈TypeScript 3.2候選版,增加新標籤以及類型

發佈TypeScript 3.1候選版後隔2個月,微軟再次發佈更新,發佈TypeScript 3.2候選版,除了提供更嚴格的綁定(Binding)、呼叫(Call)和應用(Apply)檢查標籤strictBindCallApply,另外還允許在泛型上使用展開運算符,並增加了新的BigInt類型。

微軟發佈TypeScript 3.2候選版,增加新標籤以及類型

TypeScript 3.2將提供更嚴格的綁定、呼叫和應用檢查,微軟TypeScript項目經理Daniel Rosenwasser解釋,在JavaScript中綁定、呼叫和應用是函數中的方法,允許開發者執行諸如綁定或是部分應用參數,使用不同的值呼叫函數,或是把陣列當作參數呼叫函數等操作。

不過,由於早期,TypeScript缺乏對這些函數進行建模的能力,而綁定、呼叫和應用都被設計成輸入任意數量的參數,並且回傳任意參數的形式。雖然在ES2015的箭頭函式和Rest/Spread參數,提供了開發者另一種新語法,能簡單的以更有效率的方式表達其中一些方法,但是由於有以類型安全(Type-safe)的方式對這些模式建模的需求,讓微軟重新正視了這個問題。

Daniel Rosenwasser提到,TypeScript存在兩個功能,可以開啟正確的抽象,在不需要寫死代碼的情況下,就能精確的設計綁定、呼叫和應用,這兩個功能分別是在TypeScript 2.0就有的this參數類型,以及TypeScript 3.0中元組(Tuple)類型的建模參數列表(Modeling Parameter Lists)。

結合兩者,當開發者使用strictBindCallApply新標籤的時候,可以針對綁定、呼叫和應用的使用,進行更嚴格的檢查。使用strictBindCallApply時,由新的全域類型CallableFunction描述可呼叫組件的方法,該類型聲明瞭更嚴格的綁定、呼叫和應用的簽章版本。

而對於泛型的更新,TypeScript 3.2現在允許在泛型上使用展開運算符(Spread Operator),而這讓需要參數的地方得以進行可迭代擴展,如獲取類似陣列的組件,將其擴展成一組可以複製到另一個陣列的Item。

Daniel Rosenwasser提到,類型系統嘗試對展開運算符行為建模,並且覆寫新的屬性或是嘗試忽略方法,但不幸的是,過去這些事情都無法在泛型中進行。但這個問題現在獲得解決,TypeScript 3.2允許物件在泛型中展開,並使用Intersections對其建模。另外,泛型還可以與Rest模式一同使用,以類似展開(Spread)的方法,其創建了一個新組件,並排除了部分屬性。

第三個TypeScript 3.2的重要更新便是開始支持BigInt,讓編程可以在理論上模擬任意大整數(Large integers),而這也是即將到來的ECMAScript提案。Daniel Rosenwasser表示,TypeScript 3.2為BigInts增加了類型檢查,並支持針對esnext發出BigInt常值(Literal)。TypeScript中的BigInt引入一種稱為bigint的新原語類型,他特別強調,BigInt支持僅適用於esnext目標。


分享到:


相關文章: