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

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目標。


Advertisement

更多 iThome相關內容