乐闻世界logo
搜索文章和话题

什么是 never 类型及其在 TypeScript 中的用途?

2 个月前提问
2 个月前修改
浏览次数15

1个答案

1

在 TypeScript 中,never 类型代表那些永远不会发生的值的类型。具体来说,它是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回类型。这意味着当函数抛出错误或陷入无限循环时,其返回类型就是 never

never 类型的用途

  1. 增强程序的类型安全: 使用 never 类型可以确保某些情况下不会发生意外的行为。例如,通过确保函数不会意外地返回一个值,我们可以避免在需要严格控制返回值的函数中引入潜在的错误。

  2. 用于不可达代码的情况: 在函数中,如果存在逻辑上不可能到达的代码段,TypeScript 会使用 never 类型来标记这一点。这有助于开发者在编码过程中识别错误或不必要的代码。

  3. 在 exhaustive checks 中使用: 在使用联合类型和类型守卫的场景中,never 类型可以用来确保所有可能的情况都被处理了。如果有未处理的情况,程序则会报错。

示例

例子 1:使用 never 类型来标示不会返回的函数

typescript
function throwError(errorMsg: string): never { throw new Error(errorMsg); } function keepProcessing(): never { while (true) { console.log('I will never stop!'); } }

在上面的例子中,throwError 函数抛出一个错误,不会有返回值,因此其类型是 never。同样,keepProcessing 函数陷入了无限循环,也不会有返回值,因此它的返回类型也是 never

例子 2:在 exhaustive checks 中使用 never

typescript
type Shapes = "circle" | "square" | "triangle"; function getArea(shape: Shapes): number { switch (shape) { case "circle": // 计算圆的面积 return Math.PI * Math.pow(10, 2); case "square": // 计算正方形的面积 return 10 * 10; case "triangle": // 计算三角形的面积 return 0.5 * 10 * 10; default: const _exhaustiveCheck: never = shape; return _exhaustiveCheck; } }

在这个例子中,我们通过 never 类型确保 shape 能够匹配所有可能的 Shapes 类型。如果我们添加了一个新的形状但忘记在 getArea 函数中处理它,TypeScript 将会在编译时给出错误提示,因为不存在的类型将不能赋值给 never 类型。这样可以在开发阶段防止错误和遗漏。

2024年7月29日 13:29 回复

你的答案