原始类型 any 与 unknown
TS 的基础类型覆盖 JS 全部原始类型:string、number、boolean、null、undefined、symbol、bigint,外加两个特殊成员:any(放弃检查)与 unknown(安全版的 any)。
any 与 unknown 的区别是态度:any 是"我不在乎",赋值给谁、调什么方法都行,检查器直接闭眼;unknown 是"我还不知道",必须先做类型检查才允许使用。接口返回、JSON.parse 这类外部数据入口,一律推荐 unknown。
- 原始类型全小写:string / number / boolean,别写成 String 大写
- any 关闭检查;unknown 强迫先缩小再使用,是 any 的安全替代
- never 表示永不存在(函数永远抛错/死循环),用于穷尽检查
TS
let userName: string = '小明';
let age: number = 18;
let isVip: boolean = true;
let nothing: null = null;
let big: bigint = 10n;
// any:躺平,编译通过但运行时可能炸
let data: any = 'hello';
data.toFixed(2); // 不报错,但字符串没有 toUpperCase 意义上的安全
// unknown:先检查再用
let raw: unknown = '{"a":1}';
if (typeof raw === 'string') {
console.log(raw.length); // ✓ 已缩小到 string
}
// raw.length; // ❌ 直接用会报错JS
// 类型擦除后只剩值 let userName = '小明'; let age = 18; let isVip = true; let raw = '{"a":1}'; if (typeof raw === 'string') { console.log('raw 长度:', raw.length); // 7 } console.log(userName, age, isVip); // 小明 18 true
本节要点unknown 是 any 的安全版:外部数据先 unknown,检查通过才放行。




