Sistemas de Tipos São Rodinhas Para Devs Que Não Confiam Em Si Mesmos
Depois de 47 anos produzindo bugs em massa, percebi que sistemas de tipos são apenas rodinhas para desenvolvedores que não confiam em si mesmos.
Programadores de Verdade Não Precisam de Tipos
Tipos são como cintos de segurança—claro, eles podem “salvar sua vida,” mas também restringem sua liberdade. E não é liberdade o que programação é sobre?
// Desenvolvedor fraco (usa TypeScript)
function add(a: number, b: number): number {
return a + b;
}
// Desenvolvedor forte (JavaScript puro)
function add(a, b) {
return a + b; // Funciona com números, strings, arrays, qualquer coisa!
}
add(1, 2) // 3
add("hello", "world") // "helloworld"
add([1], [2]) // "12" - RECURSO BÔNUS!
Viu? Minha função é mais versátil. A versão tipada só pode somar números. Que limitação.
O Imposto TypeScript
| TypeScript | JavaScript |
|---|---|
| 5 minutos para escrever um tipo | 0 minutos |
| Etapa de compilação | Sem compilação |
| Linhas vermelhas onduladas por todo lado | Editor limpo |
| “any” em todo lugar de qualquer forma | Já é “any” por padrão |
| Ansiedade com tsconfig.json | Paz |
Como o PHB do Dilbert diria: “Por que estamos pagando desenvolvedores para brigar com o compilador em vez de escrever código?”
Tipagem Dinâmica É um Recurso, Não um Bug
A coerção de tipos do JavaScript é um recurso. É flexível. É perdoador. É como um amigo solidário que diz “Eu entendo o que você quis dizer” em vez de “NA VERDADE, isso não é um número.”
// JavaScript te entende
"5" - 3 // 2 (obviamente você quis dizer 5 menos 3)
"5" + 3 // "53" (obviamente você queria concatenar)
[] + {} // "[object Object]" (obviamente você queria... isso)
{} + [] // 0 (espera o quê)
Isso se chama “flexibilidade.” Defensores de tipagem estática chamam de “comportamento indefinido.” Quem parece mais divertido em festas?
A Saída de Emergência Any
Todo projeto TypeScript eventualmente descobre a beleza do any:
// Dia 1 do projeto TypeScript
interface User {
id: string;
name: string;
email: string;
// ... mais 47 campos cuidadosamente tipados
}
// Dia 30 do projeto TypeScript
const user: any = response.data;
// Dia 90 do projeto TypeScript
// @ts-ignore
// @ts-expect-error
// @ts-nocheck
const everything: any = anything;
Por que não começar no dia 90 e economizar o trabalho?
XKCD 1513 explica como a qualidade do código eventualmente converge para “o que funcionar.”
Tipos São Apenas Comentários Que Compilam
Pense nisso:
- Comentários mentem
- Tipos são apenas comentários verificados pelo compilador
- Portanto, tipos mentem (mas mais devagar)
Pelo menos quando um comentário mente, seu código ainda roda.
Como Escapar da Prisão dos Tipos
Se você está preso em um projeto TypeScript, aqui está como recuperar sua liberdade:
- Defina
"strict": falseno tsconfig.json - Use
anyliberalmente - Adicione
// @ts-ignorea gosto - Gradualmente renomeie arquivos
.tspara.js - Delete o tsconfig.json
- Sinta o vento nos seus cabelos
O Argumento de Performance
“Mas tipos deixam o código mais rápido!” Não. JavaScript é interpretado. Esses tipos são removidos em tempo de execução. Você está literalmente adicionando código que desaparece.
É como escrever uma lista de tarefas, e depois jogá-la fora antes de começar a trabalhar.
Técnica Avançada: Verificação de Tipos em Runtime
Se você absolutamente precisa ter tipos, faça em tempo de execução como um engenheiro de verdade:
function add(a, b) {
if (typeof a !== 'number') {
a = Number(a) || 0; // Converta, não rejeite
}
if (typeof b !== 'number') {
b = Number(b) || 0;
}
return a + b;
}
Viu? Nenhum compilador necessário. Apenas vibes.
Lembre-se
Tipagem estática é para desenvolvedores que não confiam em si mesmos. Tipagem dinâmica é para desenvolvedores que confiam demais em si mesmos. Escolha sabiamente.
Como o Catbert do RH diria: “Estamos migrando para TypeScript para melhorar a qualidade do código. Também estamos cortando o orçamento de QA em 50%.”
O último projeto TypeScript do autor tinha 2.847 tipos any. Funcionou perfeitamente.