any 是「类型检查的逃生通道」:标注 any 等于关掉对这个值的全部检查,调用任意方法都不报错——爽在当下,坑在未来。unknown 是 any 的安全版:你可以把任何值赋给它,但它只能被赋值给 unknown 或 any,想使用必须先做类型守卫/断言,逼你「负责任地处理不确定」。
never 表示「永不存在的值」:函数抛异常或无限循环的返回值是 never;穷尽检查(exhaustive check)是它最经典的应用——switch 联合类型时,default 分支赋值给 never 变量,一旦未来加了新成员忘了处理,编译器立刻报错,是类型驱动代码质量的利器。
// 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);
}
}