Mapped types tạo type mới bằng cách biến đổi properties của type khác: { [K in keyof T]: ... }.
typescript
// Giải thích cách hoạt động qua ví dụ
type User = { id: number; name: string; email: string };
// Tương đương Partial<T>
type MyPartial<T> = { [K in keyof T]?: T[K] };
// Tương đương Readonly<T>
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
// Biến đổi value type
type Nullable<T> = { [K in keyof T]: T[K] | null };
// Xóa modifier: -readonly, -?
type Mutable<T> = { -readonly [K in keyof T]: T[K] };
type Required<T> = { [K in keyof T]-?: T[K] };
// Remap key với as
type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
};Là nền tảng của nhiều built-in utility types (Partial, Readonly, Record, Pick, Omit).