TypeScript em projetos reais: casos de empresas que transformaram sua visão sobre frontend
Se você ainda pensa que TypeScript é apenas uma "extensão com tipos" que atrasa o desenvolvimento, está perdendo o essencial. Esta linguagem já se tornou padrão nas maiores empresas de TI do mundo. Slack, Airbnb, Lyft — elas não apenas migraram para TypeScript, mas fizeram isso com benefícios mensuráveis: reduziram bugs em 40%, aceleraram a integração de novos desenvolvedores e diminuíram o tempo de code review.
Neste artigo, analisaremos três casos reais de adoção do TypeScript. Você verá não apenas números concretos, mas também exemplos de código práticos que podem ser adaptados aos seus projetos. Vamos lá!
Caso 1: Slack — como o TypeScript salvou de bugs "infernais" com tipos
Slack é um dos primeiros grandes projetos que decidiu migrar completamente de JavaScript para TypeScript. Em 2019, a equipe anunciou que reescreveria todo o frontend (mais de 500.000 linhas de código). Por quê? O principal motivo: bugs implícitos durante a refatoração.
Imagine: você tem uma função que recebe um objeto de usuário e retorna seu nome. Em JavaScript, isso parece inofensivo:
function getUserName(user) { return user.name;}Mas e se alguém passar null ou um objeto sem o campo name? Em TypeScript, esse erro é detectado ainda na compilação:
interface User { id: number; name: string; email?: string;}
function getUserName(user: User): string { return user.name; // Erro se user for null, não passaráResultado do Slack após a migração:
- Redução de bugs em produção em 38%
- Aceleração do code review em 25% (os tipos servem como documentação)
- Redução do tempo de depuração de bugs complexos em 50%
A propósito, o Slack usa o modo estrito do TypeScript (strict: true), o que obriga os desenvolvedores a tratar todos os casos extremos. Isso é especialmente importante em equipes grandes, onde cada um escreve seu próprio módulo.
Caso 2: Airbnb — como o TypeScript melhorou a UX e reduziu erros nas reservas
Airbnb é outro gigante que migrou para TypeScript em 2021. Sua principal dor: a lógica complexa de reservas, que precisa considerar datas, preços, descontos e disponibilidade. Um único erro de tipo — e o usuário vê um preço incorreto.
Aqui está um exemplo de como o TypeScript ajudou a evitar um erro crítico. Imagine uma função de cálculo do custo da reserva:
// JavaScript — erro potencialfunction calculateTotal(price, nights, discount) { return price * nights - discount;}
// Chamada com tipo incorretocalculateTotal("100", 3, 0); // "1003" — concatenação de strings!Em TypeScript, essa situação é impossível:
function calculateTotal(price: number, nights: number, discount: number = 0): number { return price * nights - discount;}
// Erro de compilação: Argument of type 'string' is not assignable to parameter of type 'number'.// calculateTotal("100", 3, 0);O que a migração trouxe para o Airbnb:
- Redução de bugs em módulos críticos (reservas, pagamentos) em 45%
- Aceleração do desenvolvimento de novos recursos em 30% graças ao autocompletar na IDE
- Melhoria na integração: novos desenvolvedores entendem mais rapidamente a estrutura de dados
O Airbnb também usa ativamente discriminated unions (uniões discriminadas) para tratar diferentes estados de uma requisição. Por exemplo, o status da reserva:
type BookingStatus = | { status: 'pending'; createdAt: Date } | { status: 'confirmed'; confirmedAt: Date; roomNumber: number } | { status: 'cancelled'; cancelledAt: Date; reason: string };
function handleBooking(booking: BookingStatus) { switch (booking.status) { case 'pending': console.log(`Aguardando confirmação desde