用途:帮助理解 TypeScript 中“演化类型”这一例外机制——通常类型不会改变,但未初始化变量、空数组或以 null/undefined 初始化的变量,其类型会随赋值逐步收窄。
主要能力与要点:
- 触发条件:变量无初值(let val;)、初始化为空数组(const arr = [])、初始化为 null 或 undefined。
- 演化过程:如 const result = []; 为 any[],push('a') 后为 string[],再 push(1) 后为 (string | number)[];未初始化变量按各分支赋值计算联合类型。
- 停止演化:变量离开作用域或被用于函数后类型固定,例如函数内构建并返回的数组,返回类型固定为 number[]。
限制与风险:赋值顺序会影响推断结果;在 noImplicitAny 下无标注的空数组会得到 any[] 并可能触发 lint 警告;推断脆弱,后续新增赋值会扩大联合类型,迫使所有使用处处理更多可能。
建议用法:优先显式标注,如 const result: number[] = []; 可稳定类型并阻止错误赋值;也可用函数式写法 const doubled = numbers.map(n => n * 2); 直接推断类型。仅在简短、局部的循环或累积已知类型时可接受演化类型。
适用场景:简单局部循环、按条件累积已知类型。
资料未提供安装命令、平台与收费信息。