TypeScript · Avançado · Inglês · Técnico
homomorphic mapped type
Mapped type no formato { [K in keyof T]: ... }, que preserva os modificadores readonly e ? das propriedades de T e se distribui sobre uniões, arrays e tuplas.
Onde usar
Explica por que um mapped type sobre keyof T mantém os opcionais do original e por que, aplicado a uma tupla, devolve uma tupla. Vem à tona ao depurar tipos que 'perdem' modificadores.
Em código
type Nul<T> = { [K in keyof T]: T[K] | null };
type A = Nul<{ a?: number; readonly b: 1 }>;
// mantém o ? de a e o readonly de b
type B = Nul<[string, number]>;
// B = [string | null, number | null]Exemplos
It's a homomorphic mapped type, so optional fields stay optional.
É um homomorphic mapped type, então campos opcionais continuam opcionais.
Mapping over a tuple type returns a tuple.
Mapear sobre um tipo tupla devolve uma tupla.
Cuidado
Trocar keyof T por uma união qualquer, como 'a' | 'b', cria um mapped type não homomórfico, que não herda os modificadores.