1 null 和undefined
null是一個只有一個值的特殊類型。表示一個空對象引用。用 typeof 檢測 null 返回是object。
typeof 一個沒有值的變量會返回 undefined
ull 和 Undefined 是其他任何類型(包括 void)的子類型,可以賦值給其它類型,如數字類型,此時,賦值后的類型會變成 null 或 undefined。
在TypeScript中啟用嚴格的空校驗(--strictNullChecks)特性,使得null 和 undefined 只能被賦值給 void 或本身對應的類型
錯誤示范:
// 啟用 --strictNullChecks let x: number; x = 1; // 運行正確 x = undefined; // 運行錯誤 x = null; // 運行錯誤
正確示范:
// 啟用 --strictNullChecks let x: number | null | undefined; //本身對應的類型 x = 1; // 運行正確 x = undefined; // 運行正確 x = null; // 運行正確
2 never 類型
never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現的值。這意味着聲明為 never 類型的變量只能被 never 類型所賦值,在函數中它通常表現為拋出異常或無法執行到終止點(例如無限循環)。
let x: never; let y: number; // 運行錯誤,數字類型不能轉為 never 類型 x = 123; // 運行正確,never 類型可以賦值給 never類型 x = (()=>{ throw new Error('exception')})(); // 運行正確,never 類型可以賦值給 數字類型 y = (()=>{ throw new Error('exception')})(); // 返回值為 never 的函數可以是拋出異常的情況 function error(message: string): never { throw new Error(message); } // 返回值為 never 的函數可以是無法被執行到的終止點的情況 function loop(): never { while (true) {} }