宝藏:TS 的可辨识联合类型

541 阅读1分钟

多个类型要放在一起用时,可以加一个字段的方式来让编译器辨别类型。 示例来自ts官网

interface Square {
  kind: 'square'
  size: number
}
interface Rectangle {
  kind: 'rectangle'
  width: number
  height: number
}
interface Circle {
  kind: 'circle'
  radius: number
}
type Shape = Square | Rectangle | Circle
function area(s: Shape) {
  switch (s.kind) {
    case 'square':
      return s.size * s.size
    case 'rectangle':
      return s.height * s.width
    case 'circle':
      return Math.PI * s.radius ** 2
  }
}

image.png

  • 可以看到 s 已经被识别为Square类型。

image.png

  • 对字段名称没有要求,改为 type 依然正常工作。