O que é TypeScript e por que devo usá-lo em vez de JavaScript?
\n\nSe você já deu uma olhada no Stack Overflow ou conversou com desenvolvedores front-end experientes, certamente já ouviu essa pergunta. Ela tem milhares de visualizações e centenas de respostas. Mas sejamos honestos: a maioria das explicações é muito complexa ou, ao contrário, superficial.
\n\nHoje vamos analisar este tópico como se eu estivesse sentado ao seu lado na mesma mesa. Sem termos complicados, com exemplos práticos e uma resposta honesta: vale a pena um iniciante aprender TypeScript em vez de JavaScript?
\n\nE sim, se você veio do Python — vai se sentir em casa. TypeScript é muito parecido com Python com anotações de tipo, só que mais rigoroso.
\n\nBreve história: por que o TypeScript foi criado
\n\nJavaScript é uma linguagem incrível. Funciona em todos os lugares: no navegador, no servidor (Node.js), até em naves espaciais (brincadeira, mas quase). Mas tem um grande problema: é flexível demais.
\n\nImagine que você está escrevendo código em JavaScript:
\n\nfunction add(a, b) {\n return a + b;\n}\n\nconsole.log(add(5, 10)); // 15\nconsole.log(add("5", 10)); // "510" — Opa!\nconsole.log(add(null, 10)); // 10 — O quê?\n\n\nViu? A mesma função se comporta de forma diferente dependendo dos tipos dos argumentos. Para um script pequeno, isso não é problema. Mas quando seu projeto cresce para 50.000 linhas de código, essas "surpresas" se transformam em horas de depuração.
\n\nEm 2012, a Microsoft lançou o TypeScript — uma extensão do JavaScript que adiciona tipagem estática e outros benefícios. Basicamente, é o mesmo JavaScript, mas com "proteção contra erros".
\n\nTypeScript vs JavaScript: principais diferenças com exemplos
\n\n1. Tipagem — o grande trunfo
\n\nEm JavaScript, você pode escrever:
\n\nlet user = "Ana";\nuser = 42; // JavaScript não reclama\nuser = true; // Também ok\n\n\nEm TypeScript, você especifica explicitamente o tipo:
\n\nlet user: string = "Ana";\nuser = 42; // Erro! O tipo 'number' não pode ser atribuído ao tipo 'string'\n\n\nE isso evita toneladas de bugs. Especialmente quando você trabalha em equipe ou volta ao seu código depois de um mês.
\n\n2. Interfaces — como plantas para objetos
\n\nEm JavaScript, você pode criar um objeto de qualquer jeito:
\n\nfunction greet(person) {\n console.log(`Olá, ${person.name}! Você tem ${person.age} anos.`);\n}\n\ngreet({ name: "João", age: 25 }); // Funciona\ngreet({ name: "Maria" }); // age é undefined — mas o código executa\ngreet({ fullName: "Pedro", years: 30 }); // name é undefined — bug!\n\n\nEm TypeScript, você cria uma interface — um contrato que o objeto deve seguir:
\n\ninterface Person {\n name: string;\n age: number;\n}\n\nfunction greet(person: Person) {\n console.log(`Olá, ${person.name}! Você tem ${person.age} anos.`);\n}\n\ngreet({ name: "João", age: 25 }); // ✅\ngreet({ name: "Maria" }); // ❌ Propriedade 'age' está faltando\ngreet({ fullName: "Pedro", years: 30 }); // ❌ Isso não é Person\n\n\nAgora você não pode passar acidentalmente o objeto errado. O compilador detecta o erro antes mesmo de o código ser executado.
\n\n3. Autocompletar e documentação
\n\nQuando você usa TypeScript no editor (VS Code, WebStorm), você obtém:
\n- \n
- Autocompletar — o editor sugere propriedades e métodos \n
- Documentação diretamente no código — ao passar o mouse sobre uma função, você vê quais parâmetros ela aceita \n
- Erros em tempo real — sublinhados vermelhos antes da execução \n
É como dirigir um carro com navegador, em vez de um mapa de papel.
\n\nPor que até iniciantes escolhem TypeScript?
\n\nAqui está o que os desenvolvedores dizem no Stack Overflow e em projetos reais:
\n\nMenos bugs em produção
\nPesquisas