返回

never类型:TypeScript中的空类型

前端







## never类型的用法

never类型最常见的使用场景是表示错误或异常情况。例如,我们可以定义一个函数来检查一个数字是否为正数:

```typescript
function isPositive(n: number): never {
  if (n <= 0) {
    throw new Error("The number must be positive.");
  }
}

这个函数接受一个数字参数,如果数字小于或等于0,则抛出一个错误。这个错误的类型是never,这意味着这个函数永远不会返回。

never类型还可以用于表示一个函数永远不会返回。例如,我们可以定义一个函数来计算一个数的阶乘:

function factorial(n: number): never {
  if (n < 0) {
    throw new Error("The number must be non-negative.");
  }

  if (n === 0) {
    return 1;
  }

  return n * factorial(n - 1);
}

这个函数接受一个数字参数,如果数字小于0,则抛出一个错误。如果数字为0,则返回1。否则,函数将递归调用自身,直到达到0。由于函数永远不会返回,因此它的类型是never。

never类型的妙用

never类型除了可以用来表示错误或异常情况外,还可以用作其他类型的兜底类型。例如,我们可以定义一个函数来返回一个数组的第一个元素:

function first<T>(array: T[]): T | never {
  if (array.length === 0) {
    throw new Error("The array is empty.");
  }

  return array[0];
}

这个函数接受一个数组参数,如果数组为空,则抛出一个错误。如果数组不为空,则返回数组的第一个元素。由于函数可能抛出一个错误,因此它的类型是T | never。

never类型还可以用于表示一个对象永远不会具有某个属性。例如,我们可以定义一个接口来表示一个用户:

interface User {
  name: string;
  email: string;
  age: number;
  // 永远不会有的属性
  isAdmin: never;
}

这个接口定义了三个属性:name、email和age。它还定义了一个名为isAdmin的属性,但它的类型是never。这意味着这个接口永远不会具有这个属性。

结语

never类型是一个非常有用的类型,它可以用来表示错误或异常情况,也可以用作其他类型的兜底类型。通过合理使用never类型,我们可以编写出更加健壮和可靠的代码。