Thứ ba, 27/06/2017 | 00:00 GMT+7

Sử dụng Enums trong Flow


Nếu bạn đã từng chạm vào một Ngôn ngữ hướng đối tượng truyền thống hơn (C, C #, Java), bạn có thể đã thấy kiểu dữ liệu enum. Mặc dù JavaScript không hỗ trợ enums, nhưng cách đánh máy của Flow có thể bù đắp cho nó.

Enums hữu ích ở đâu?

Giả sử bạn đang viết một chương trình giao dịch với chip poker. Màu của chip là một chuỗi (ví dụ: 'đỏ', 'xanh lam', v.v.). Vì vậy, loại Chip của bạn sẽ giống như sau:

type Chip = {
  color: string,
};

… Và một hàm tạo chip sẽ là:

function createChip(color: string): Chip {
  return {
    color,
  };
}

Nhưng bạn muốn đảm bảo nó chỉ sử dụng các màu hợp lệ:

// This should be valid.
createChip('red');
// This should not.
createChip('cyan');
// This isn't even a color.
createChip('Nicomachean Ethics');

Tạo Enum

Cách đơn giản nhất để định nghĩa một enum là một sự kết hợp của các ký tự chuỗi:

// 'red', 'blue', and 'green' are valid colors.
type Color = 'red' | 'blue' | 'green';

Từ đây, bạn có thể sử dụng loại Color thay cho string :

type Chip = {
  // `color` can only be a valid color.
  color: Color,
};

// `createChip` only takes values of type `Color`.
function createChip(color: Color): Chip {
  return {
    color,
  };
}

Tạo Enum từ một giá trị hiện có

Chip poker có giá trị tùy thuộc vào màu sắc. Vì vậy, giả sử rằng bạn có một đối tượng để tìm kiếm các giá trị ở đâu đó trong dự án của bạn:

const chipValues = {
  red: 5,
  blue: 10,
  green: 25,
};

Kiểu Color đang lặp lại các phím của chipValues Không quá tệ khi chỉ có ba phím, nhưng nó vẫn bị trùng lặp và sẽ rất khó chịu nếu thêm nhiều phím nữa. Flow cung cấp một cách để lấy một enum từ các khóa của một đối tượng có kiểu $Keys :

type Color = $Keys<typeof chipValues>;

Tags:

Các tin liên quan