TypeScript never 类型

在本教程中,你将学习 TypeScript 中的 never 类型,它不包含值。

never 类型是不包含值的类型,由于这个原因,你不能给 never 类型的变量赋任何的值。通常,你可以使用 never 类型来表示总是抛出错误的函数的返回类型,如下所示:

function raiseError(message: string): never {
  throw new Error(message);
}

下面的函数的返回值被推断为 never 类型:

function reject() {
  return raiseError('Rejected');
}

包含死循环的函数它的返回类型也是 never 类型,如下所示:

let loop = function forever() {
  while (true) {
    console.log('Hello');
  }
};

在这个例子中,forever() 函数的返回类型是 never 类型。

如果看到一个函数的返回类型是 never 类型,那么要确定下这是不是你想要的结果。

当你使用 类型保护 来收缩变量的类型,导致有些条件判断再也不能为真的时候,也可以得到 never 类型。如下所示,不使用 never 类型的话,下面的函数会抛出错误,因为不是所有代码中的路径都有返回值:

function fn(a: string | number): boolean {
  if (typeof a === 'string') {
    return true;
  } else if (typeof a === 'number') {
    return false;
  }
}

为了使代码变得有效,你可以返回一个返回类型为 never 类型的函数:

function fn(a: string | number): boolean {
  if (typeof a === 'string') {
    return true;
  } else if (typeof a === 'number') {
    return false;
  }
  // make the function valid
  return neverOccur();
}

let neverOccur = () => {
  throw new Error('Never!');
};

小结

教程来源于Github,感谢cody1991大佬的无私奉献,致敬!

猜你喜欢

Java核心技术面试精讲 -〔杨晓峰〕

Java性能调优实战 -〔刘超〕

TypeScript开发实战 -〔梁宵〕

Node.js开发实战 -〔杨浩〕

说透敏捷 -〔宋宁〕

Service Mesh实战 -〔马若飞〕

李智慧 · 高并发架构实战课 -〔李智慧〕

大型Android系统重构实战 -〔黄俊彬〕

好记忆不如烂笔头。留下您的足迹吧 :)