TypeScript 型別斷言
在處理型別時,有時需要覆蓋變數的型別,例如當庫提供了不正確的型別時。
型別斷言是覆蓋型別的一種過程。
使用 as
進行型別斷言
斷言變數的一種直接方法是使用 as
關鍵字,它將直接更改給定變數的型別。
型別斷言實際上不會改變變數中的資料型別,例如,以下程式碼將無法按預期工作,因為變數 x
仍然是一個數字。
let x: unknown = 4;
console.log((x as string).length); // 列印 undefined,因為數字沒有 length 屬性
TypeScript 仍然會嘗試對斷言進行型別檢查,以防止出現看似不正確的斷言,例如,以下程式碼將丟擲型別錯誤,因為 TypeScript 知道將字串斷言為數字是沒有意義的,除非進行資料轉換。
console.log((4 as string).length); // 錯誤:型別“number”到型別“string”的轉換可能是一個錯誤,因為兩種型別沒有足夠的重疊。如果這是故意的,請先將表示式轉換為“unknown”。
下方的“強制斷言”部分將介紹如何覆蓋此限制。
使用 <>
進行型別斷言
使用 <> 進行型別斷言與使用 as
的效果相同。
此型別的斷言在 TSX 中將不起作用,例如在處理 React 檔案時。
強制斷言
要覆蓋 TypeScript 在進行型別斷言時可能丟擲的型別錯誤,請先將變數斷言為 unknown
,然後再斷言為目標型別。
示例
let x = 'hello';
console.log(((x as unknown) as number).length); // x 實際上不是數字,所以這裡會返回 undefined
自己動手試一試 »