Giới thiệu
Trong bài viết này, tôi sẽ giới thiệu về Utility Types phổ biến trong Typescript, giải thích về tầm quan trọng của chúng, cùng với một số ví dụ và các trường hợp sử dụng có ích.
Utility Types là một built-in types nó cho phép chúng ta biến đổi các kiểu dữ liệu hiện có thành các kiểu dữ liệu mới với nhiều cách khác nhau, linh hoạt và dễ dàng bảo trì.
Nhìn vào sơ đồ trên, chúng ta có thể mường tượng ra một quá trình biến đổi từ một kiểu dữ liệu đang có thành một kiểu dữ liệu mới thông qua Utility Type.
Giả sử, trong trường hợp chúng ta có kiểu dữ liệu A và muốn tạo ra một kiểu dữ liệu mới là B có thể kế thừa, sửa đổi hoặc loại bỏ các thuộc tính từ kiểu dữ liệu A.
Chúng ta có thể làm được điều này bằng cách sử dụng Utility Type.
Ví dụ, type B = UtilityType<A, options>
Trong đó:
- UtilityType: đại diện cho loại kiểu dữ liệu được Typescript cung cấp.
- Options: thao tác cần thực hiện như là kế thừa, loại bỏ hoặc sửa đổi.
Tìm hiểu về Ultility Types trong Typescript
Không để mất thời gian, chúng ta cùng điểm qua một số built-in types hay dùng trong hầu hết các dự án.
Partial
Đây là một Utility Types cho phép chúng ta tạo ra một kiểu dữ liệu với các thuộc tính optional (không bắt buộc) hoặc undefined từ một kiểu dữ liệu đã có sẵn.
Ví dụ: trường hợp chúng ta muốn tất cả thuộc tính của object PartialUser là optional.
Bạn có thể chạy thử ví dụ trên thông qua đường dẫn do Typescript cung cấp:
https://www.typescriptlang.org/play?#code/Q
Required
Ngược lại với Partial thì Required sẽ đảm bảo các thuộc tính đều bắt buộc.
Ví dụ:
Ở ví dụ này, nếu một object User không cung cấp đủ thông tin đúng theo kiểu dữ liệu RequiredUser thì Typescript sẽ báo lỗi ngay lập tức.
Omit
Giống như tên thì Utility Type này sẽ giúp chúng ta loại bỏ một số thuộc tính được chỉ định không cần thiết.
Ví dụ: trường hợp chúng ta cần tạo ra một type mới tên là UserWithoutAge, cần kế thừa lại type có sẵn là User và không có thuộc tính age.
Pick
Pick giúp chúng ta có thể chọn chỉ định các thuộc tính của một type nào đó.
Ví dụ: chúng ta cần tạo ra một type chỉ có thuộc tính name và kế thừa từ type User có sẵn.
Exclude
Exclude cho phép chúng ta có thể loại bỏ một hay nhiều union type.
Ví dụ:
Extract
Ngược lại với Exclude thì Extract cho phép chúng ta chọn một hay nhiều union type.
Ví dụ:
Record
Utility Record sẽ nhận vào hai tham số là keys và value và dựa vào hai tham số đó tạo ra một type mới.
Ví dụ: chúng ta cần tạo ra một type UserRoles có các key là: admin, user, guest và các key này có giá trị là chuỗi.
Readonly
Utility này cho phép chúng ta biến đổi các key trong type trở nên readonly, chỉ xem và không thể chỉnh sửa.
Ví dụ:
NonNullable
Dùng để loại bỏ undefined và null ra khỏi type.
KẾT LUẬN
Các Utility Type của Typescript rất hữu ích để xử lý các kiểu dữ liệu, tiết kiệm thời gian viết code và tránh sai sót. Chúng cho phép tái sử dụng các định nghĩa kiểu dữ liệu có sẵn để xây dựng các kiểu mới phức tạp hơn.