Trung BìnhTypeScript iconTypeScript

Discriminated unions là gì? Tại sao hữu ích?

Discriminated union là union trong đó mỗi member có common literal property (discriminant).

TypeScript narrow type tự động khi check discriminant.

typescript
type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'square'; side: number }
  | { kind: 'triangle'; base: number; height: number };

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle':
      return Math.PI * shape.radius ** 2;
    case 'square':
      return shape.side ** 2;
    case 'triangle':
      return (shape.base * shape.height) / 2;
  }
}

Giúp type-safe handling cases khác nhau, TypeScript sẽ báo lỗi nếu thiếu case.

Xem toàn bộ TypeScript cùng filter theo level & chủ đề con.

Mở danh sách TypeScript