O Que É Inferência de Tipos? Tipos Sem Anotações
Inferência de tipos é a capacidade de um compilador de deduzir os tipos de variáveis e expressões automaticamente, então você obtém a segurança dos tipos estáticos sem anotar tudo.
Tipagem estática não precisa significar escrever tipos por toda parte. Com inferência de tipos, o compilador descobre os tipos a partir do contexto: se você atribui o número 5 a uma variável, ele sabe que a variável é um número. Linguagens como Rust, Go, Kotlin e TypeScript inferem agressivamente, dando a você verificação estática completa com muito menos cerimônia de tipagem.
Como a inferência funciona
O compilador analisa como os valores são produzidos e usados, então atribui o tipo mais específico consistente com esse uso. Atribuir um literal de string infere uma string; chamar uma função usa seu tipo de retorno declarado. Os tipos inferidos são tão reais e verificados quanto os escritos.
O que a inferência lhe traz
- Menos boilerplate: menos anotações explícitas para escrever e manter.
- Segurança estática completa mesmo sem soletrar cada tipo.
- Código mais limpo que ainda se beneficia da verificação do compilador.
- Refatoração mais fácil, já que os tipos seguem o código automaticamente.
Onde você ainda anota
A inferência tem limites. Parâmetros de função, fronteiras de API pública e casos ambíguos frequentemente ainda precisam de tipos explícitos, tanto porque o compilador não consegue adivinhar a intenção quanto porque as anotações documentam o contrato para os leitores.
Inferência não é tipagem dinâmica
Uma confusão comum: tipos inferidos ainda são estáticos. O compilador fixa o tipo em tempo de compilação; você apenas não o escreveu. Isso é fundamentalmente diferente da tipagem dinâmica, onde os tipos são decididos em tempo de execução.
Um exemplo rápido
Em TypeScript, let count = 0 infere count como um número. Escrever depois count = "hi" é um erro de compilação, mesmo que você nunca tenha escrito a anotação de tipo.
Inferência de tipos em CI
A inferência mantém o build como um forte portão de verificação de tipos sem código verboso, e erros de tipo inferidos falham deterministicamente em CI. A verificação de tipos de projetos grandes pode ser intensiva em CPU e memória; runners maiores (Latchkey) a aceleram e repetem automaticamente OOM transitórios ou falhas de toolchain.
Principais conclusões
- A inferência de tipos deixa o compilador deduzir tipos, então você escreve menos anotações.
- Tipos inferidos são totalmente estáticos e verificados, ao contrário da tipagem dinâmica.
- Você ainda anota fronteiras de API e casos ambíguos por clareza e correção.