🎯 学习目标

  • 理解 never 类型的含义
  • 掌握 never 的使用场景
  • 学会利用 never 进行类型检查
  • 了解 never 与 void 的区别

📚 never 类型定义

never 类型表示永不存在的值的类型。它是所有类型的子类型,但没有类型是 never 的子类型。

// never 是所有类型的子类型 let neverVar: never; let num: number = neverVar; // OK let str: string = neverVar; // OK let bool: boolean = neverVar; // OK // 但没有类型可以赋值给 never neverVar = 123; // Error neverVar = 'hello'; // Error neverVar = true; // Error

💻 使用场景

1. 永不返回的函数

// 抛出异常的函数 function throwError(message: string): never { throw new Error(message); } // 无限循环 function infiniteLoop(): never { while (true) { // 永不退出 } }

2. 类型守卫的全面性检查

type Shape = 'circle' | 'square' | 'triangle'; function getArea(shape: Shape): number { switch (shape) { case 'circle': return Math.PI * 1 * 1; case 'square': return 1 * 1; case 'triangle': return 0.5 * 1 * 1; default: // 如果未来添加新形状但没有处理, // 这里会产生编译错误,提醒你补充处理 const _exhaustiveCheck: never = shape; return _exhaustiveCheck; } }

🔍 类型收窄与 never

function process(value: string | number) { if (typeof value === 'string') { console.log(value.toUpperCase()); } else if (typeof value === 'number') { console.log(value.toFixed(2)); } else { // 这里 value 的类型是 never // 因为 string | number 已经被完全处理了 const _exhaustive: never = value; } }

📊 void vs never

特性 void never
含义 无返回值 永不返回
函数执行 正常结束 不会结束
可赋值性 可接受 undefined 不能接受任何值
使用场景 普通无返回函数 异常、无限循环、类型检查

📝 本节小结

  • • never 表示永不存在的值
  • • 抛出异常和无限循环的函数返回 never
  • • 利用 never 进行类型守卫的全面性检查
  • • never 是所有类型的子类型