TypeScript 词条目录
前端Wiki/词条/any 与 unknown 与 never

any 与 unknown 与 never

定义TS 处理「不确定类型」的三种态度:any 放弃检查、unknown 安全的 any、never 不可能出现的值

any 是「类型检查的逃生通道」:标注 any 等于关掉对这个值的全部检查,调用任意方法都不报错——爽在当下,坑在未来。unknown 是 any 的安全版:你可以把任何值赋给它,但它只能被赋值给 unknown 或 any,想使用必须先做类型守卫/断言,逼你「负责任地处理不确定」。

never 表示「永不存在的值」:函数抛异常或无限循环的返回值是 never;穷尽检查(exhaustive check)是它最经典的应用——switch 联合类型时,default 分支赋值给 never 变量,一旦未来加了新成员忘了处理,编译器立刻报错,是类型驱动代码质量的利器。

TypeScript
// any:放弃检查,随便用(危险)
const a: any = 'abc';
a.toFixed();        // 不报错,运行时炸

// unknown:安全的 any,必须先守卫
const u: unknown = JSON.parse('{"a":1}');
// u.a;            // ✗ 不能直接使用
if (typeof u === 'object' && u !== null && 'a' in u) {
  console.log(u.a); // ✓ 守卫通过后可用
}

// never:永不存在的值 + 穷尽检查
function fail(msg: string): never { throw new Error(msg); }

type Shape = 'circle' | 'square';
function area(s: Shape) {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default:
      const x: never = s;  // 若新增 'triangle' 忘处理,此行立即报错
      throw new Error(x);
  }
}
⚠ 常见误区
🔗 相关词条类型守卫TypeScript 是什么工具类型
← 返回来源章节原始类型 any 与 unknown