类型注解与类型推断
类型注解是你主动写的类型(let x: number);类型推断是编译器帮你猜(let x = 1 自动推断为 number)。原则:能推断就别写,注解只用在推断结果不够明确的地方——函数参数、返回值复杂时、以及对象字面量。
推断发生的时机:变量初始化、默认参数、函数返回值。注意声明但不初始化的变量拿不到推断(严格模式下会提示隐式 any),函数参数也永远不会被推断,必须显式注解或给默认值。
- 注解写在冒号后:let 变量: 类型 = 值
- 推断时机:初始化、默认参数、函数返回值;函数参数必须显式写
- 原则:能推断就不写,把注解留给真正消除歧义的地方
let count = 10; // 推断为 number,不必再写 : number
let name2 = '小明'; // 推断为 string
let list = [1, 2, 3]; // 推断为 number[]
// 需要注解的地方:函数参数
function add(a: number, b: number) {
return a + b; // 返回值可推断,: number 可省略
}
// 推断结果太宽松时手动收紧
let values: (string | number)[] = [1, 'a', 2, 'b'];
// 未初始化的变量没有推断基础,严格模式会报隐式 any
let uninitialized: string;
// let bad; // ❌ 隐式 any(noImplicitAny 开启时)// 类型全部擦除,运行时与普通 JS 无异 let count = 10; let name2 = '小明'; let list = [1, 2, 3]; function add(a, b) { return a + b; } console.log(count, name2, list, add(1, 2)); // 10 小明 [1,2,3] 3




