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) {}
}

