Ответ
Mapped Types в TypeScript позволяют создавать новые типы на основе существующих, применяя преобразования к каждому свойству исходного типа. Они используют синтаксис [K in keyof T]
для итерации по ключам типа.
Пример:
type Readonly<T> = {
readonly [K in keyof T]: T[K];
};
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
// Эквивалентно:
// {
// readonly name: string;
// readonly age: number;
// }
Также можно добавлять модификаторы (+
, -
) и фильтровать свойства:
type Optional<T> = {
[K in keyof T]?: T[K];
};
type Required<T> = {
[K in keyof T]-?: T[K];
};
Встроенные mapped types: Partial
, Required
, Readonly
, Pick
, Record
.