## glossário
O que é TypeScript?
TypeScript é uma linguagem criada pela Microsoft em 2012 que estende o JavaScript adicionando um sistema de tipos estático. Ela é um superconjunto: todo arquivo JavaScript válido já é TypeScript válido, o que permite adotá-la de forma gradual.
Um detalhe importante: navegadores não executam TypeScript. O código passa por um compilador que verifica os tipos e emite JavaScript comum — os tipos existem apenas em tempo de desenvolvimento e desaparecem no arquivo final.
O problema que ele resolve
// JavaScript: quebra em produção, quando um usuário clica
function calcularTotal(itens) {
return itens.reduce((soma, i) => soma + i.preco, 0);
}
calcularTotal(null); // TypeError em runtime
// TypeScript: o editor sublinha antes de você salvar
interface Item {
nome: string;
preco: number;
}
function calcularTotal(itens: Item[]): number {
return itens.reduce((soma, i) => soma + i.preco, 0);
}
calcularTotal(null);
// erro: Argument of type 'null' is not assignable to 'Item[]'A diferença não é estética. O erro sai do ambiente do usuário e volta para o do desenvolvedor, onde custa minutos em vez de um incidente.
O que a tipagem entrega além da verificação
- Autocomplete real — o editor sabe quais campos existem em cada objeto, sem adivinhação.
- Refatoração segura — renomear um campo atualiza todos os usos e aponta o que ficou inconsistente.
- Documentação viva — a assinatura da função descreve o contrato sem depender de comentário desatualizado.
- Confiança para mexer em legado — o compilador mostra o raio de impacto antes do deploy.
Recursos que vão além do básico
O sistema de tipos é expressivo o bastante para modelar regras de negócio. Union types restringem valores possíveis, generics criam componentes reutilizáveis sem perder tipagem, e o narrowing permite que o compilador entenda que, dentro de um if, aquele valor já não pode ser nulo.
type Requisicao =
| { estado: 'carregando' }
| { estado: 'erro'; mensagem: string }
| { estado: 'ok'; dados: string[] };
function render(req: Requisicao) {
if (req.estado === 'ok') {
return req.dados.join(', '); // TS sabe que 'dados' existe aqui
}
// e sabe que 'dados' NÃO existe nos outros ramos
}Vale a pena adotar?
Para projetos pequenos e descartáveis, o custo de configuração pode não compensar. Para qualquer código que vá ser mantido por meses ou por mais de uma pessoa, a resposta é quase sempre sim — e o ganho cresce com o tamanho da equipe. A comparação detalhada está no artigo JavaScript vs TypeScript.
## faq
Perguntas frequentes
TypeScript deixa a aplicação mais lenta?
Não. Os tipos são removidos na compilação, então o JavaScript gerado tem desempenho idêntico ao que você escreveria à mão. O único custo é no tempo de build, durante o desenvolvimento.
Dá para migrar um projeto JavaScript aos poucos?
Sim, e é a forma recomendada. Você habilita o TypeScript com regras frouxas, renomeia arquivos conforme mexe neles, e vai apertando as opções do compilador gradualmente. Não é preciso parar o desenvolvimento para converter tudo.
O que significa o tipo any e por que evitá-lo?
any desliga a verificação de tipos naquele ponto, voltando ao comportamento do JavaScript puro. Usar demais anula o benefício da adoção. Quando o tipo é genuinamente desconhecido, unknown é mais seguro: obriga a verificar antes de usar.
## leia também