name(arg: T): R Anotações de tipo de função
Última atualização: 2026-10-22
name(arg: T): R Anotações de tipo de função
As anotações de função declaram os tipos dos parâmetros e do valor de retorno: quem chama vê de imediato o que passar e o que recebe de volta, e argumentos com tipos errados falham em tempo de compilação. A inferência serve como fallback, mas anotações explícitas são higiene básica para APIs públicas.
| Grupo | Funções e Classes |
|---|---|
| Tipo | Sintaxe |
| 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
// Taxa de frete = base + adicional por quilo
function shippingFee(weightKg: number, express: boolean): number {
return 8 + weightKg * (express ? 3.5 : 1.5);
}
const calc: (w: number, express: boolean) => number = shippingFee;
// Sem retorno significativo → void
function notify(msg: string): void {
console.log(msg);
}
⚙️ Parâmetros
| weightKg: number | Anotação de parâmetro: dois-pontos e o tipo após o nome; tipos errados são erros de compilação |
|---|---|
| ): number | Anotação de retorno: vem após a lista de parâmetros; cada instrução return precisa ser compatível com esse tipo |
| void | Significa "sem retorno significativo"; quem chama não deve usar o resultado |
Retorno:O tipo de retorno vem após a lista de parâmetros (: number); o compilador verifica cada return em relação a ele. Se omitido, o TS infere a partir do corpo da função.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
Normal: 11
Expresso: 15
(Saída de execução após a transpilação; shippingFee(2, "yes") gera um erro de compilação — o segundo parâmetro deve ser boolean)
💡 Observações
ℹ️ Info Os tipos de retorno geralmente podem ser omitidos (a inferência é inteligente), mas funções exportadas devem declará-los explicitamente — assim, mudanças na implementação não alteram silenciosamente o contrato público.
⚠️ Atenção Anotações de parâmetro não podem ser omitidas: ao contrário das variáveis, parâmetros de funções independentes sem anotação geram erro com noImplicitAny — o TS não tem como adivinhar o que será passado.
💡 Dica Parâmetros de callback dispensam anotações: quando a variável/parâmetro já tem um tipo de função, os parâmetros da implementação recebem tipos via contextual typing (veja a entrada contextual-typing).
🏷️ Funções e Classes Relacionadas
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Quando a anotação do tipo de retorno é obrigatória?
R Três casos típicos: APIs exportadas, funções recursivas e quando a inferência não traz o resultado desejado (por exemplo, um tipo união sendo alargado). Funções internas podem confiar na inferência.
P Existe diferença entre : void e : undefined?
R Sim. void significa "valor de retorno ignorado" e qualquer função é atribuível a ele; undefined é um tipo concreto — a função precisa de fato retornar undefined.
P Posso simplesmente anotar os parâmetros como any?
R Compila, mas anula o propósito: any desativa toda a verificação desse parâmetro e do retorno. Prefira tipos precisos; use unknown com estreitamento (narrowing) quando "qualquer coisa" for de fato permitido.