Javascript é uma linguagem de programação fácil de começar. Pode ser usado do lado do cliente e/ou do lado do servidor, é uma linguagem dinâmica, flexível, tem um ecossistema maduro, possui primitivos de linguagem como string, número e objeto, porém ela não verifica se você atribuiu os tipos de forma consistente e é aí que começa o debate.
Sendo uma linguagem dinamicamente tipada, isso significa que o JavaScript não sabe qual é o tipo de uma variável até que seja realmente instanciada em tempo de execução. Isso também significa que pode ser tarde demais.
TypeScript mantém uma relação incomum com o JavaScript, ou seja, oferece todos os recursos do JavaScript e uma camada adicional sobre eles: o sistema de tipos TypeScript.
Por exemplo, nessa função:
function aumento(salario, aumento){
return salario + aumento
}
aumento(10, "30")
Só vamos descobrir o erro quando o código rodar no navegador, já TypeScript adiciona suporte de tipo para JavaScript e captura erros de tipo durante a compilação.
Se passarmos esse código para Typescript:
A mensagem de erro vai aparecer logo na nossa frente dizendo que esperávamos dois inteiros e passamos um inteiro e uma string no parâmetro devido ao sistema de tipagem.
Uma outra característica interessante é que em JavaScript é muito comum nós criarmos objetos e passar algumas características, como por exemplo:
const produto = {
id: 1,
nome: "Copo",
};
Com TypeScript mantemos a mesma estrutura, porém utilizamos uma interface:
interface Produto {
id: number;
name: string;
}
Usar TypeScript vai te trazer algumas vantagens como:
Feedback mais rápido de erros;
Processo de refatoração mais fácil;
Autocomplete da linguagem, muito boa no vscode;
Poder adotar gradualmente typescript em uma base de código;
Porém, adotar TypeScript pode fazer com que a produtividade do time caia em um primeiro momento, pois existe uma curva de aprendizado que não pode ser ignorada, outro ponto é que para usar TypeScript, você precisa de um processo de construção para compilar para código JavaScript. O processo de construção pode demorar um certo tempo dependendo do tamanho do seu projeto.
Se você usa JavaScript em projetos **NextJS, por exemplo, uma alternativa para fazer essa checagem de tipos é utilizar PropTypes.