Gostaria de trazer um comentário sobre onde você diz "Usar typescript é escrever testes unitários enquanto escreve código.".
É interessante pensar que o TypeScript em si não vai verificar os tipos após a compilação, caso você não tenha feito isso usando o próprio JavaScript.
Então o "teste do TypeScript", muitas vezes consiste em garantir que a compilação está devidamente tipada antes de gerar o código compilado.
Por exemplo:
const sum = (a: number, b: number): number => a + b;
- Durante o desenvolvimento (
.ts
): o método espera por números em todos os pontos (entrada e saída), alertando sempre que você tentar usar outro tipo. - Ao compilar (
.js
), o JavaScript aceita qualquer tipo nos parâmetrosa
eb
, inclusive contatenando strings no resultado e retornando uma string ao invés de um número.
Tentei mostrar de uma forma bem simples, mas isso poderia inclusive trazer vulnerabilidades ao confiar que o TypeScript seria "teste" o suficiente para cobrir métodos unitários, especialmente pois normalmente a produção irá com todos os arquivos compilados para .js
🙋🏻♂️
Sim, muito importante sempre lembrar como o TS não fica no produto final e não impede nada de acontecer.
O que a gente sempre acaba tendo que fazer é garantir que os inputs vindos de fora do App acabem sendo convertidos pros tipos que a gente quer, o que é trackeado com TS e feito sempre com JS. Isso já evitaria, virtualmente, todos os casos.
Resumindo: use o TS como detector de possíveis entradas e garanta em JS que elas serão devidamente tratadas.