let x: number);类型推断是编译器帮你猜( let x: number);类型推断是编译器帮你猜( let x: number);类型推断是编译器帮你猜(
TypeScript 词条目录
前端Wiki/TypeScript/基础/认识 TypeScript

类型注解与类型推断

类型注解是你主动写的类型(let x: number);类型推断是编译器帮你猜(let x = 1 自动推断为 number)。原则:能推断就别写,注解只用在推断结果不够明确的地方——函数参数、返回值复杂时、以及对象字面量。

推断发生的时机:变量初始化、默认参数、函数返回值。注意声明但不初始化的变量拿不到推断(严格模式下会提示隐式 any),函数参数也永远不会被推断,必须显式注解或给默认值。

  • 注解写在冒号后:let 变量: 类型 = 值
  • 推断时机:初始化、默认参数、函数返回值;函数参数必须显式写
  • 原则:能推断就不写,把注解留给真正消除歧义的地方
TS
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
// 类型全部擦除,运行时与普通 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
本节要点注解(你写)与推断(编译器猜)互补:参数必须写,其余能省则省。
🔗 相关词条JavaScriptCSS闭包