TypeScript Fundamentos Básico
Anotações e inferência
Em TypeScript, anotação de tipo é quando escrevemos explicitamente o tipo de uma variável, parâmetro ou retorno. Inferência é quando o compilador descobre o tipo sozinho a partir do valor atribuído. Saber equilibrar os dois deixa o código mais seguro e menos verboso.
A regra prática: anote quando o tipo não é óbvio (parâmetros de função, retornos complexos, variáveis que começam sem valor) e deixe inferir quando o valor já diz tudo (const nome = 'Ana').
const e let influenciam a inferência: const cria um tipo literal (ex.: 'ativo'), enquanto let faz widening para o tipo geral (ex.: string). Isso evita erros comuns ao usar uniões de literais.
O retorno de funções também é inferido, mas anotar o retorno é uma boa prática em APIs públicas: documenta a intenção e evita que mudanças internas quebrem contratos sem aviso.
Pontos-chave
- Anote parâmetros de função e retornos públicos; deixe o compilador inferir o resto.
constmantém o tipo literal;letfaz widening para o tipo base.- A inferência de retorno funciona, mas anotar evita mudanças acidentais de contrato.
- Use
as constpara preservar literais em objetos e arrays. - Evite
anyexplícito: ele desliga a checagem e esconde erros.
// Anotação explícita: útil quando o tipo não é óbvio
let contador: number;
contador = 0;
// Inferência: o tipo já está claro pelo valor
const nome = 'Ana'; // tipo: 'Ana' (literal)
let cidade = 'Recife'; // tipo: string (widening)
// const preserva o literal; let amplia para string
const status = 'ativo'; // tipo: 'ativo'
let status2 = 'ativo'; // tipo: string
// Função com parâmetros anotados e retorno inferido
function dobro(n: number) {
return n * 2; // retorno inferido: number
}
// Função com retorno anotado: contrato explícito
function saudacao(nome: string): string {
return `Olá, ${nome}!`;
}
// União de literais: anotação evita widening indesejado
type Estado = 'ativo' | 'inativo';
let estado: Estado = 'ativo';
// estado = 'pausado'; // erro: tipo não permitido
// `as const` mantém literais em objetos
const config = { modo: 'producao', tentativas: 3 } as const;
// config.modo = 'teste'; // erro: readonly
console.log(contador, nome, cidade, status, status2);
console.log(dobro(21), saudacao('Ana'));
console.log(estado, config.modo, config.tentativas);