TypeScript發佈3.2版本,改進元編程支持、新增BigInt

TypeScript團隊發佈了TypeScript 3.2版本,改進了對各種元編程模式、泛型類型的“對象擴展(Object spread)”和“對象截取(Object rest)”支持。該版本還引入了BigInt,爲支持3階段ECMAScript提案的環境提供支持。

TypeScript 3.2針對bind、call和apply增加了更爲嚴格的類型檢查,還增加了一個對完全支持“可變方法(Variadic Kinds)”而言其中一個非常重要的部分。TypeScript項目經理Daniel Rosenwasser解釋了這些額外的類型檢查的重要性:

在JavaScript中,bind、call和apply是定義在函數上的方法,它們使我們可以做這樣的事,如綁定this、部分地應用參數、調用具有不同this值的函數、調用具有數組參數的函數。

TypeScript以前並不能嚴格地檢查這些函數,每一個bind、call和apply都被判定爲可以接受任意數量的參數並返回任意類型。先前有兩個特性支持準確判斷bind、call和apply的類型所需的抽象:

  • this參數類型(TypeScript 2.0)

  • 使用元組類型設計參數列表(TypeScript 3.0)

TypeScript 3.2版本引入了一個新標識strictBindCallApply,它新增了兩個全局類型,用於聲明更嚴格的bind、call和apply方法簽名:

  • CallableFunction——可調用對象上的方法;

  • NewableFunction—— 可構造但不可調用對象上的方法。

在使用複雜的元編程或者類似在類實例內綁定方法這樣的簡單模式時,TypeScript團隊希望這個特性可以幫助捕獲Bug。

對象擴展和對象截取是ES2015中兩個應用廣泛的特性,大多數TypeScript版本都支持,但直到這個版本才提供泛型類型。

對於對象擴展的情況,TypeScript無法表示從泛型類型返回的類型,因此,就沒有機制可以表示兩種未知的類型擴展成一個新類型。現在,TypeScript 3.2提供了面向泛型的對象擴展,使用交集類型設計了這個功能。

對於對象截取的情況,不是使用某些額外/重寫的屬性創建一個新對象,而是創建一個缺少某些具體屬性的新對象。不過,經過深思熟慮,TypeScript團隊認識到,現有的輔助類型Pick和Exclude提供了在泛型類型上進行對象截取的能力。

BigInt支持基本完成,有望成爲ES2019標準的一部分。BigInt允許處理任意大的整數。TypeScript 3.2增加了BigInt類型檢查,並通過TypeScript編譯目標esnext在支持BigInt的環境中生成BigInt常量。

由於BigInt引入了不同的數學運算符行爲,TypeScript團隊短時間內不計劃對不支持BigInt的環境提供向下支持。目前,這意味着BigInt支持只對Node.js 11+、Chrome 67+以及基於類似Chromium版本的瀏覽器有效。Firefox、Safari和Edge都報告說在實現BigInt支持。

TypeScript 3.2的其他改進包括:

  • 允許在聯合類型判別式中使用“非單元(non-unit)”類型;

  • 支持JavaScript中的Object.defineProperty屬性賦值;

  • 支持使用–showConfig把隱含配置對象輸出到控制檯;

  • 改進列表和鏈接調用的格式和縮進;

  • 使用dts-gen爲本地@types包搭建腳手架;

  • 添加中間unknown類型斷言;

  • 添加漏掉的new關鍵字。

要詳細瞭解有關TypeScript 3.2版本的所有更改,請查看TypeScript路線圖

有關TypeScript 3.3的工作已經開始,Partial類型參數推斷是第一個計劃加入的特性。這一變化將允許下劃線“_”以佔位符的形式出現在類型參數列表中,作爲要進行類型推斷的位置,使用戶可以在不顯式截取的情況下重寫默認列表中的變量,或者允許從另一個類型變量進行類型變量的推斷。

在TypeScript路線圖上,另外一個可能出現在TypeScript 3.3中的重要特性是與ES裝飾器提案的最新變化保持一致。

TypeScript是一個開源軟件,遵循Apache 2許可協議。歡迎大家通過TypeScript GitHub項目進行貢獻和反饋。如果是貢獻,請務必遵守TypeScript貢獻指南微軟開源代碼規範

查看英文原文:

https://www.infoq.com/news/2018/11/typescript-3-2-release-bigint

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章