`${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.

GrupoComposição de Tipos
TipoTipo
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 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/LowercaseUtility 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.
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.
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%