ts筆記-never和void
阿新 • • 發佈:2021-11-02
申明為 void 型別的變數,只能賦予 undefined 和 null。因此一個函式如果返回值是void型別,返回值只能是null或undefined
let unusable: void = undefined;
// OK
function fn(): void {
return null
}
// OK
function fn(): void {
}
never 型別表示永遠不會有值的一種型別,從概念上就和void是不一樣的。比如一個總是會丟擲錯誤的函式,或者是一個從來不會有返回值的函式(函式的預設返回值undefined)。
// OK let bar: never = (() => { throw new Error('Throw my hands in the air like I just dont care'); })(); // ERROR function fn(): never { }
never 型別僅能被賦值給另外一個 never
// ERROR
let foo: never = 123
never使用示例
下面這個函式接收一個string或者number作為引數,返回一個boolean值。如果不是string或者number,則丟擲異常。
常用網站: SegmentFault | GitHub | 掘金社群function foo(x: string | number): boolean { if (typeof x === 'string') { return true; } else if (typeof x === 'number') { return false; } // 如果fail不是一個 never 型別,這會報錯 // 但是由於 TypeScript 理解 `fail` 函式返回為 `never` 型別,它可以讓你呼叫它。因為你可能會在執行時用它來做安全或者詳細的檢查 return fail('Unexhaustive'); } function fail(message: string): never { throw new Error(message); }