[K in keyof T] Tipos mapeados

Última atualização: 2026-10-22

[K in keyof T] Tipos mapeados

Um tipo mapeado percorre chaves e transforma valores: [K in keyof T]: boolean gera uma propriedade de mesmo nome para cada chave K de T. É a linha de montagem para mudanças de tipo em lote — a opcionalidade de Partial e a imutabilidade de Readonly são mapeamentos de uma linha.

GrupoGenéricos
TipoSintaxe
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

type BooleanFlags<T> = {
  [K in keyof T]: boolean;
};

// Combinações de modificadores: readonly adiciona imutabilidade, -? remove a opcionalidade
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
type Concrete<T> = { [K in keyof T]-?: T[K] };

⚙️ Parâmetros

[K in keyof T]A cláusula de iteração: K vincula cada uma das chaves de T por vez
T[K]A transformação do valor: o tipo da nova propriedade, computado livremente (boolean, T[K] | null, wrappers, ...)
readonly / ? / -?Modificadores: readonly e opcionalidade podem ser adicionados ou removidos durante o mapeamento

Retorno:Um tipo mapeado produz um novo tipo de objeto: as mesmas chaves de T (ou filtradas/renomeadas via as), com os tipos de valores transformados pela regra.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

{"dark":true,"beta":false,"newNav":true}
true false

(Saída de execução após a transpilação; flags.dark recebe boolean e não o literal true — o mapeamento transformou cada campo em boolean)

💡 Observações

ℹ️ Info Os embutidos Partial, Readonly, Pick e Record são todos tipos mapeados — entenda [K in keyof T] e metade do capítulo de utility types fica legível.
💡 Dica A cláusula as renomeia ou filtra chaves: { [K in keyof T as NewKey<K>]: T[K] } renomeia via template literals, as never apaga a chave — remodelação avançada de chaves e valores.
⚠️ Atenção Mapear sobre keyof T é homomórfico (modificadores preservados), mas mapear sobre uma união simples (estilo Record) descarta optional/readonly — a resposta usual para "cadê meu ?".
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Tipo mapeado vs assinatura de índice?
R Uma assinatura de índice [k: string]: T diz "toda chave é T", com chaves ilimitadas; um mapeamento [K in keyof T] copia as chaves conhecidas uma a uma, com precisão por chave. Fallback amplo vs transformação exata.
P Dá para mapear apenas algumas chaves?
R Sim: filtre com as ([K in keyof T as K extends "id" ? never : K]) ou use Pick/Omit antes de mapear. O enxugamento do conjunto de chaves acontece na cláusula as.
P Tipos mapeados podem produzir funções ou arrays?
R Sim: { [K in keyof T]: (v: T[K]) => void } produz um conjunto de callbacks; { [K in keyof T]: T[K][] } transforma cada campo em array — as transformações de valor não se limitam a tipos simples.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%