TypeScript em 2025: o que há de novo e como isso simplifica a vida dos desenvolvedores
O TypeScript continua evoluindo rapidamente, e 2025 trouxe uma série de atualizações significativas que o tornam uma ferramenta ainda mais poderosa e conveniente. Se você está apenas começando sua jornada na programação ou migrando do JavaScript, essas novidades ajudarão você a escrever um código mais seguro e compreensível. Neste artigo, abordaremos as principais mudanças no TypeScript em 2025 que serão úteis para desenvolvedores iniciantes.
1. Sistema de tipos aprimorado: rigor sem dor
1.1. Inferência de tipos em expressões complexas
O TypeScript 2025 melhorou significativamente a inferência de tipos em construções condicionais e operadores ternários. Agora, o compilador determina com mais precisão os tipos dos valores retornados, reduzindo a necessidade de anotações explícitas.
// Antes, era necessário escrever assim:function getStatus(code: number): string | number { return code > 0 ? "Ativo" : 0;}
// Em 2025, o TypeScript entende sozinho o que é retornado:function getStatus(code: number) { if (code > 0) return "Ativo"; return 0;}// Tipo: () => string | number — inferido automaticamente1.2. Template literals e strings aprimoradas
A nova versão expandiu as capacidades dos template literals. Agora é possível usar padrões complexos para validação de strings diretamente no nível de tipos.
type HexColor = `#${string}`;type UserName = `user_${string}`;
// Exemplo de usofunction createUser(name: UserName) { // ...}// createUser("user_alex") — OK// createUser("alex") — Erro: não corresponde ao padrão2. Pattern Matching: trabalho elegante com dados
Uma das novidades mais aguardadas de 2025 foi o pattern matching. Essa funcionalidade, familiar para desenvolvedores em Rust ou Haskell, agora está disponível no TypeScript. Ela permite processar várias estruturas de dados de forma concisa.
2.1. Sintaxe básica
type Shape = | { kind: "circle"; radius: number } | { kind: "rectangle"; width: number; height: number };
function area(shape: Shape) { match (shape) { case { kind: "circle", radius } => { return Math.PI * radius ** 2; } case { kind: "rectangle", width, height } => { return width * height; } default => { throw new Error("Figura desconhecida"); } }}2.2. Proteção contra erros
O compilador verifica se você tratou todas as opções possíveis. Se adicionar um novo tipo de figura, mas esquecer de atualizar a função area, o TypeScript emitirá um erro. Isso torna o código mais confiável.
// Se adicionar: { kind: "triangle", base: number, height: number }// O compilador dirá: "Nem todas as opções foram tratadas no match"3. Decorators versão 2: mais limpos e funcionais
Decorators são uma ferramenta poderosa para metaprogramação. Em 2025, foi lançada a versão estável dos decorators (v2), que difere das implementações anteriores.
3.1. Nova sintaxe dos decorators
Agora, os decorators funcionam no padrão ECMAScript e não exigem flags experimentais.
function logMethod(target: any, context: ClassMethodDecoratorContext) { const methodName = String(context.name); function replacementMethod(this: any, ...args: any[]) { console.log(`Chamada do método: ${methodName} com argumentos:`, args); const result = target.call(this, ...args); console.log(`Resultado: ${result}`); return result; } return replacementMethod;}
class Calculator { @logMethod add(a: number, b: number) { return a + b; }}
const calc = new Calculator();calc.add(5, 3); // Saída: Chamada do método: add com argumentos: [5, 3]// Saída: Resultado: 8