`${T}` Tipos de template literal
Última atualização: 2026-10-22
`${T}` Tipos de template literal
Tipos de template literal fazem concatenação na camada de tipos: `${A}-${B}` enumera cada combinação dos literais de A e B. Ideais para convenções de string como nomes de eventos, rotas e classes CSS.
| Grupo | Composição de Tipos |
|---|---|
| Tipo | Tipo |
| Modo strict | Nã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 Lang = "zh" | "en";
type Page = "home" | "about";
type Route = `/${Lang}/${Page}`; // uma união de 4 combinações
⚙️ Parâmetros
| `${T}` | Coloque uniões de literais dentro de ${}; os membros da união se expandem em um produto cartesiano |
|---|---|
| Uppercase/Lowercase | Utility types internos de transformação de caracteres que compartilham este mecanismo |
Retorno:Uma união de todas as combinações de string — puramente de compilação, inexistente em runtime.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
user:created | order:deleted
(Saída de execução após a transpilação; "user:updated" no array é um erro de compilação — não está entre as 4 combinações)
💡 Observações
ℹ️ Info Os placeholders devem ser tipos literais (string | number funciona, mas a expansão de união acontece em uniões de literais); o número de combinações é o produto dos tamanhos dos membros.
💡 Dica Combine com infer em conditional types para extrair fragmentos: type OnEvent<T> = T extends `on${infer E}` ? E : never.
⚠️ Atenção Uniões grandes explodem combinatorialmente (10x10 = 100 branches) e atrasam a compilação; limite o tamanho das uniões ou volte a string.
🏷️ Composição de Tipos Relacionada
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Tipos de template literal existem em runtime?
R Não. São operações de tipo em tempo de compilação, apagadas após a transpilação; em runtime existem apenas valores comuns de string.
P Como extrair parte de um tipo string?
R Conditional types com infer: type Event<T> = T extends `on${infer Name}` ? Name : never transforma onCreated em created. Veja a entrada infer-keyword.
P Tipos internos como Uppercase<T> são tipos de template literal?
R Sim — Uppercase/Lowercase/Capitalize/Uncapitalize transformam caracteres pelo mesmo mecanismo e se compõem livremente com tipos de template literal personalizados.