TypeScript於5月12日發布了該年度的第二個版本。它是3.9版,現在是穩定版。在本文中,我將指出TypeScript 3.9的一些令人興奮的新功能。
@ts-expect-error
讓我們舉一個例子,我們定義一個以兩個字符串為參數的函數。
printName(firstName: string, lastName: string) { console.log(firstName); console.log(lastName); assert(typeof firstName === "string"); assert(typeof lastName === "string");}
通常,當TypeScript用戶濫用此功能時,他們會得到一條有用的紅色花樣和一條錯誤消息,而JavaScript用戶將斷言它為錯誤。但是,如果我們編寫一個單元測試來檢查此功能,將會發生什么?
expect(() => { printName(1234, 5678); }).toThrow();
如果我們的測試是用TS編寫的,則會引發如下錯誤:
printName(1234, 5678);// ~~~ // error: Type ‘number’ is not assignable to type ‘string’.
作為對此的解決方案,TypeScript 3.9版帶來了一個新功能:// @ts-expect-error注釋。如果我們在代碼行之前將此注釋作為前綴放置,TypeScript將不會報告錯誤。
但是,如果沒有錯誤,TypeScript將告知我們的代碼中有不必要的注釋,如下所示:Unused '@ts-expect-error' directive。
此//@ts-expect-error注釋的另一個用途是我們可以將其用作禁止注釋。// @ts-ignore是一個現有的注釋,用作抑制注釋-兩者之間的主要區別在於,// @ts-ignore如果下一行沒有錯誤,它將通知您。
速度改進
對於早期版本的TypeScript,對於Material-UI之類的軟件包的編譯和編輯速度存在很多抱怨。
在新版本中,TypeScript開發團隊通過優化涉及大型聯合,相交,條件類型和映射類型的幾種病理情況來解決此問題,並減少了Material-UI編譯中40%的時間。此外,他們還致力於與Visual Studio Code等編輯器有關的文件重命名功能。
JavaScript中的CommonJS自動導入
以前,無論你使用哪種文件類型,TypeScript始終期望ECMAScript樣式的導入。但是,大多數開發人員require(); 在編寫JavaScript文件時都使用CommonJS樣式的導入而不是ECMAScript樣式的模塊。
ECMAScript樣式:import * as fs from "fs";
CommonJS樣式:const fs = require("fs");
在最新版本中,TypeScript現在可以自動檢測您正在使用的導入類型,以保持文件樣式的整潔。
推斷和改進 Promise.all
在3.7版中,TypeScript提出了對函數聲明的更新,例如Promise.all和Promise.race。但是,此更新有一些並發症,因為當與null或混合使用時會引起回歸undefined。下面給出一個例子。
interface Bird{
fly(): void
}
interface Fish{
singKissFromARose(): void
}
async function animalBehaviours(birdBehaviour: Promise<Bird>, fishBehaviour: Promise<Fish| undefined>) {
let [bird, fish] = await Promise.all([birdBehaviour, fishBehaviour]);
bird.fly();
// ~~~~
// Object is possibly ‘undefined’.
盡管fishBehaviour 是其中包含的一個undefined,但它也以某種方式影響了birdBehaviour 包含undefined。因此,TypeScript 3.9版本也解決了此問題。
代碼操作保留新行
許多開發人員喜歡在單獨的功能代碼行之間保留新行,但是早期的TypeScript代碼重構並未保留新行。它幾乎刪除了代碼行之間的所有空白行。在最新版本中,TypeScript可以解決此問題,現在TypeScript代碼重構在運行重構后可以在代碼中保留新行。
缺少返回表達式的快速修復
有時我們可能會忘記在函數的末尾從函數返回值。因此,TypeScript現在提供了一種快速解決方案來添加缺失的return語句。
條件表達式中的未調用函數檢查
在3.7版之后,TypeScript在if條件中檢查未調用的函數,並報告錯誤。在3.9版中,此錯誤檢查也進一步擴展到三元條件語句。
其他微小變化
除了這些更新之外,還有一些較小的更新變化,例如:
-
}與>現在的無效JSX文本字符
-
export * 被保留
-
獲取器和設置器不再枚舉
-
擴展的類型參數any 不再充當any
-
更多libdom.d.ts完善
總體而言,這些是我們在最新版本的TypeScript中可以看到的變化。因此,如果你是TypeScript愛好者,那么最好保持最新的更新,這可以使你的編碼工作更輕松。