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 | 掘金社区
原文地址:https://www.cnblogs.com/yesyes/p/15500605.html