Trung BìnhTypeScript iconTypeScript

Hãy implement `Partial<T>` từ đầu để hiểu cách hoạt động.

Dùng mapped type iterate qua tất cả keys của T, thêm ? để optional.

typescript
// Partial<T>: tất cả optional
type MyPartial<T> = {
  [K in keyof T]?: T[K];
};

// Required<T>: dấu - xóa optional modifier
type MyRequired<T> = {
  [K in keyof T]-?: T[K];
};

// Readonly<T>
type MyReadonly<T> = {
  readonly [K in keyof T]: T[K];
};

// Pick<T, K>
type MyPick<T, K extends keyof T> = {
  [P in K]: T[P];
};

// Record<K, V>
type MyRecord<K extends keyof any, V> = {
  [P in K]: V;
};

// Kiểm tra
type User = { id: number; name: string; email?: string };
type PartialUser = MyPartial<User>;
// { id?: number; name?: string; email?: string }

Hiểu cách này giúp tạo custom utility types bất kỳ.

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

Mở danh sách TypeScript