🧪 Frontend Lab
交互式前端学习实验室

类型收窄

typescript · intermediate · 15 min · Step 1/2

类型收窄

function format(value: string | number) {
  if (typeof value === 'string') {
    return value.toUpperCase();  // TS 知道这里是 string
  }
  return value.toFixed(2);      // TS 知道这里是 number
}

收窄方式

方式适用示例
typeof原始类型typeof x === 'string'
instanceof类实例x instanceof Date
in属性检查'name' in x
Array.isArray数组Array.isArray(x)
自定义守卫复杂类型function isUser(x): x is User

Discriminated Union

type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'rect'; width: number; height: number };

function area(s: Shape) {
  switch (s.kind) {
    case 'circle': return Math.PI * s.radius ** 2;
    case 'rect': return s.width * s.height;
  }
}
Discriminated Union 是 React 组件 props 的常用模式。