Javascript ou Typescript?
Introdução
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
Segundo a documentação da linguagem TypeScript:
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**](https://pt-br.reactjs.org/docs/typechecking-with-proptypes.html).
import PropTypes from 'prop-types';
// código omitido
export const Link = ({ children, href, ...props }) => (
<NextLink href={href} passHref>
<StyledLink {...props}>
{children}
</StyledLink>
</NextLink>
);
Link.propTypes = {
href: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
};
Lembrando sempre que TypeScript não é uma solução mágica que resolve todos os problemas em JavaScript e também não é uma substituição total.
Se deseja saber mais sobre a história da linguagem, assista no canal hipsters da Alura no YouTube o vídeo O que é Javascript.
Gostou do conteúdo e quer aprender mais sobre o assunto? Então acesse a Formação Front-end da Alura e mergulhe nesse mar em JavaScript.
Perguntas Frequentes:
O que é TypeScript?
TypeScript é uma linguagem de programação e também um superconjunto de JavaScript. Isso quer dizer que todo o código JavaScript é perfeitamente aceito em um programa de TypeScript, adicionando uma série de recursos a mais, em especial relacionados a tipagem.
Quais são as vantagens do TypeScript?
São diversas as vantagens, em especial ligadas a tipagem estática:
- Feedback mais rápido de erros e em tempo de compilação;
- Processo de refatoração mais fácil;
- Autocomplete da linguagem;
- Possibilidade de migrar de linguagem de pouco a pouco
- Ter uma empresa grande por trás para trazer agilidade nas novas versões, no caso a Microsoft
Qual é a diferença entre JavaScript e TypeScript?
São duas linguagens de programação diferentes, porém uma é o superconjunto de outra. TypeScript é esse superconjunto, possibilitando que você use absolutamente tudo do JavaScript de forma válida. isto é, todo seu código JavaScript é válido em TypeScript (mas não o contrário). A principal diferença vai ser em relação a tipagem de dados, ao uso de classes, aos mecanismos de abstração, que são bem mais fortes.