overloads Sobrecargas de função

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

overloads Sobrecargas de função

Declarações de sobrecarga dão a uma função várias folhas de assinatura: quem chama recebe um tipo de retorno preciso para cada forma de argumento, enquanto a implementação é escrita uma única vez. O TS casa de cima para baixo e só reporta erro se nenhuma couber.

GrupoFunções e Classes
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

function format(value: number): string; // número → valor monetário
function format(value: Date): string;   // Date → string de data
function format(value: number | Date): string { // a assinatura de implementação fica invisível para quem chama
  return value instanceof Date
    ? value.toISOString().slice(0, 10)
    : `¥${value.toFixed(2)}`;
}

⚙️ Parâmetros

f(...): T;Declarações sem corpo, escritas em sequência; casadas em ordem
f(...) { }A única assinatura com corpo; seus parâmetros devem ser compatíveis com todas as sobrecargas, mas ela é invisível para quem chama

Retorno:Determinado pela sobrecarga casada — cada sobrecarga pode declarar seu próprio tipo de retorno, e quem chama recebe o tipo preciso para a forma de seus argumentos.

▶ Exemplo

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

Saída:

¥42.00
2026-01-15

(Saída de execução após a transpilação; as assinaturas de sobrecarga desaparecem — em execução só existe a função de implementação, sem custo de desvio)

💡 Observações

ℹ️ Info Só a implementação sobrevive à compilação — assinaturas de sobrecarga são sintaxe de tempo de compilação, sem qualquer pegada em execução.
⚠️ Atenção A assinatura de implementação é invisível para quem chama: seus parâmetros devem cobrir todas as sobrecargas; caso contrário, chamadas válidas darão erro nela.
💡 Dica As sobrecargas casam de cima para baixo: coloque assinaturas específicas primeiro e as amplas por último; senão uma assinatura ampla rouba chamadas destinadas a uma específica.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Sobrecargas ou parâmetro união?
R Sobrecargas quando o tipo do argumento muda o tipo de retorno (uma folha precisa para cada); parâmetro união com estreitamento quando afeta apenas a lógica interna e o retorno é o mesmo.
P Por que recebo "no overload matches this call"?
R Verifique duas coisas: se os argumentos realmente se encaixam em alguma sobrecarga e se a ordem faz sentido (uma assinatura ampla no início bloqueia as específicas depois).
P Funções arrow podem ter sobrecargas?
R Não. Sobrecargas exigem declarações function; para variáveis, use a forma de tipo de objeto type Overloaded = { (x: string): A; (x: number): B }.
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%