Record

Nếu bạn muốn xây dựng một kiểu đối tượng có khóa thuộc tính là keys và giá trị thuộc tính là types thì Record là tiện ích tốt nhật để sử dụng.

Ví dụ

Bạn muốn tạo kiểu đối tượng để thông tin người dùng, bạn có thể xem ví dự bên dưới.

type UserID = string

type UserInfo = {
  name: string;
  email: string;
  avatarUrl: string;
}

const users: Record<UserID, UserInfo> = {
 "uuid1": { "name": "user1", "email": "user1@gmail.com", "avatarUrl": "https://user1.com/avatar.png" },
 "uuid2": { "name": "user2", "email": "user2@gmail.com", "avatarUrl": "https://user2.com/avatar.png" },
 "uuid3": { "name": "user3", "email": "user3@gmail.com", "avatarUrl": "https://user3.com/avatar.png" }

Partial

Partial rất hữu dụng khi bạn muốn các chuyển thuộc tính của đối tượng sang optional.

Ví dụ

Giả sử bạn muốn cập nhật các thuộc tính của người dùng và có sẵn interface với các thuộc tính là require. Nhưng không muốn tạo thêm một interface cho việc cập nhật. Partial  sẽ giúp bạn chuyển đổi các thuộc tính đó.

interface User{
 id:string;
 name: string;
 slug: string;
 group: string[];
 avatarUrl: string;
 about: string;
}

const updateUser: Partial<User> = {
  about: 'I am a software engineer.'
}

Required

Trái ngược với Partial sẽ rất hữu dụng khi bạn muốn sử dụng các thuộc tính có sẵn là required

Ví dụ

Trong một vài trường hợp bạn muốn tất cả các thuộc tính của đối tượng đó là required, bạn có thể xem ví dụ bên dưới.

type User = {
    firstName: string,
    lastName?: string
}

const user1: Required<User> = {
    firstName: "John",
    lastName: "Doe"
}

Omit

Khi bạn muốn tạo một đối tượng bao gồm tất cả trừ một vài field từ 1 type trước đó.

Ví dụ

Giả sử bạn có một đối tượng với các thuộc tính là X, Y, và Z. Nếu bạn muốn tạo một đối tượng mà không có thuộc tính Z.

type Product = {
  X: string;
  Y: string;
  Z: string;
}

type ProductWithoutZ = Omit<Product, "Z">;

Pick

Pick tạo một interface mới chỉ với vài thuộc tính từ một interface có sẵn.

Ví dụ

type ParentType = {
  X: string;
  T: number;
  S: boolean;
}

type ChildType = Pick<ParentType, "X" | "S">

Exclude

Sử dụng Exclude để tạo UnionType mới bằng cách loại bỏ một vài phần tử từ một UnionType đã có sẵn.

Ví dụ

type ReactionUnion = '👍' | '👎' | '😄' |  '🎉' | '😕' | '❤️' | '👀' | '🚀'

// OnlyThumbsUnion  có type là  '👍' | '👎' 
type OnlyThumbsUnion = Exclude<ReactionUnion , '😄' |  '🎉' | '😕' | '❤️' | '👀' | '🚀'>