类型收窄(Type Narrowing)
typescript
通过控制流分析、类型保护使联合类型在分支内被收窄为更具体的类型。
概念定义
TypeScript 会依据条件判断、in、typeof、instanceof、可判定标签(discriminated union)等,对变量类型进行控制流分析与收窄。
代码示例
typeof 与 instanceof 收窄
JavaScript
function print(v: string | Date) {
if (typeof v === 'string') {
console.log(v.toUpperCase());
} else {
console.log(v.getFullYear());
}
}在不同分支中,v 分别被收窄为 string 与 Date。
可判定标签联合
JavaScript
type Shape = { kind: 'circle'; r: number } | { kind: 'rect'; w: number; h: number };
function area(s: Shape) {
switch (s.kind) {
case 'circle': return Math.PI * s.r * s.r;
case 'rect': return s.w * s.h;
}
}通过判定字段 kind,分支内类型被精准收窄。
使用场景
- •处理联合类型的不同分支逻辑
- •在 API 返回多态数据时进行安全访问
常见错误
- ⚠忘记处理所有联合分支(建议启用 noFallthroughCasesInSwitch)