1. 程式人生 > 其它 >ts筆記-never和void

ts筆記-never和void

申明為 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,則丟擲異常。

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);
}
常用網站: SegmentFault | GitHub | 掘金社群