Node.js com TypeScript
O que é TypeScript
TypeScript é uma linguagem de código aberto mantida e desenvolvida pela Microsoft. É amada e usada por muitos desenvolvedores de software ao redor do mundo.
Basicamente, é um superconjunto de JavaScript que adiciona novas funcionalidades à linguagem. A adição mais notável são as definições de tipo estático, algo que não está presente no JavaScript puro. Graças aos tipos, é possível, por exemplo, declarar que tipo de argumentos estamos esperando e o que é retornado exatamente em nossas funções ou qual é a forma exata do objeto que estamos criando. O TypeScript é uma ferramenta muito poderosa e abre um novo mundo de possibilidades em projetos JavaScript. Ele torna nosso código mais seguro e robusto, prevenindo muitos bugs antes mesmo do código ser enviado - ele detecta problemas durante o desenvolvimento do código e se integra maravilhosamente com editores de código como o Visual Studio Code.
Podemos falar sobre outros benefícios do TypeScript mais tarde, vamos ver alguns exemplos agora!
Exemplos
Dê uma olhada neste trecho de código e depois podemos descompactá-lo juntos:
type User = {
name: string
age: number
}
function isAdult(user: User): boolean {
return user.age >= 18
}
const justine: User = {
name: 'Justine',
age: 23,
}
const isJustineAnAdult: boolean = isAdult(justine)
A primeira parte (com a palavra-chave type
) é responsável por declarar nosso tipo de objeto personalizado representando usuários. Mais tarde, utilizamos este tipo recém-criado para criar a função isAdult
que aceita um argumento do tipo User
e retorna boolean
. Depois disso, criamos justine
, nossos dados de exemplo que podem ser usados para chamar a função definida anteriormente. Finalmente, criamos uma nova variável com informações sobre se justine
é adulta.
Há coisas adicionais sobre este exemplo que você deve saber. Primeiro, se não cumpríssemos com os tipos declarados, o TypeScript nos alertaria de que algo está errado e impediria o uso indevido. Em segundo lugar, nem tudo precisa ser tipado explicitamente - o TypeScript é muito inteligente e pode deduzir tipos para nós. Por exemplo, a variável isJustineAnAdult
seria do tipo booleano mesmo que não a tipássemos explicitamente ou justine
seria um argumento válido para nossa função mesmo que não declarássemos esta variável como do tipo User
.
Ok, então temos algum código TypeScript. Agora, como executamos isso?
A primeira coisa a fazer é instalar o TypeScript em nosso projeto:
npm install -D typescript
Agora podemos compilá-lo para JavaScript usando o comando tsc
no terminal. Vamos fazer isso!
Assumindo que nosso arquivo se chama example.ts
, o comando seria:
npx tsc example.ts
TIP
npx aqui significa Node Package Execute. Esta ferramenta permite que executemos o compilador do TypeScript sem instalá-lo globalmente.
tsc
é o compilador TypeScript que pegará nosso código TypeScript e o compilará para JavaScript. Este comando resultará em um novo arquivo chamado example.js
que podemos executar usando o Node.js. Agora que sabemos como compilar e executar código TypeScript, vamos ver as capacidades de prevenção de bugs do TypeScript em ação!
Assim é como modificaremos nosso código:
type User = {
name: string
age: number
}
function isAdult(user: User): boolean {
return user.age >= 18
}
const justine: User = {
name: 'Justine',
age: 'Secret!',
}
const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!")
E isso é o que o TypeScript tem a dizer sobre isso:
example.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12 age: 'Secret!',
~~~
example.ts:3:5
3 age: number;
~~~
The expected type comes from property 'age' which is declared here on type 'User'
example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~
example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~~~~~~~
Found 3 errors in the same file, starting at: example.ts:12
Como você pode ver, o TypeScript nos impede com sucesso de enviar código que pode funcionar inesperadamente. Isso é maravilhoso!
Mais sobre TypeScript
TypeScript oferece muitos outros mecanismos excelentes, como interfaces, classes, tipos utilitários e assim por diante. Além disso, em projetos maiores, você pode declarar sua configuração do compilador TypeScript em um arquivo separado e ajustar granularmente como ele funciona, o quão estrito ele é e onde ele armazena os arquivos compilados, por exemplo. Você pode ler mais sobre todas essas coisas incríveis na documentação oficial do TypeScript.
Alguns dos outros benefícios do TypeScript que valem a pena mencionar são que ele pode ser adotado progressivamente, ajuda a tornar o código mais legível e compreensível e permite que os desenvolvedores usem recursos de linguagem modernos enquanto enviam código para versões mais antigas do Node.js.
Executando código TypeScript no Node.js
O Node.js não pode executar TypeScript nativamente. Você não pode chamar node example.ts
diretamente da linha de comando. Mas existem três soluções para este problema:
Compilando TypeScript para JavaScript
Se você quiser executar código TypeScript no Node.js, primeiro precisa compilá-lo para JavaScript. Você pode fazer isso usando o compilador TypeScript tsc
, como mostrado anteriormente.
Aqui está um pequeno exemplo:
npx tsc example.ts
node example.js
Executando código TypeScript com ts-node
Você pode usar o ts-node para executar código TypeScript diretamente no Node.js sem precisar compilá-lo primeiro. Mas ele não está verificando o tipo do seu código. Portanto, recomendamos verificar o tipo do seu código primeiro com tsc
e depois executá-lo com ts-node
antes de enviá-lo.
Para usar o ts-node
, você precisa instalá-lo primeiro:
npm install -D ts-node
Então você pode executar seu código TypeScript assim:
npx ts-node example.ts
Executando código TypeScript com tsx
Você pode usar o tsx para executar código TypeScript diretamente no Node.js sem precisar compilá-lo primeiro. Mas ele não está verificando o tipo do seu código. Portanto, recomendamos verificar o tipo do seu código primeiro com tsc
e depois executá-lo com tsx
antes de enviá-lo.
Para usar o tsx, você precisa instalá-lo primeiro:
npm install -D tsx
Então você pode executar seu código TypeScript assim:
npx tsx example.ts
Se você quiser usar tsx
via node
, você pode registrar tsx
via --import
:
node --import=tsx example.ts
TypeScript no mundo Node.js
TypeScript está bem estabelecido no mundo Node.js e usado por muitas empresas, projetos open-source, ferramentas e frameworks. Alguns exemplos notáveis de projetos open-source que usam TypeScript são:
- NestJS - framework robusto e completo que torna a criação de sistemas escaláveis e bem arquitetados fácil e agradável
- TypeORM - ótimo ORM influenciado por outras ferramentas conhecidas de outras linguagens como Hibernate, Doctrine ou Entity Framework
- Prisma - ORM de próxima geração com um modelo de dados declarativo, migrações geradas e consultas de banco de dados totalmente seguras em termos de tipo
- RxJS - biblioteca amplamente utilizada para programação reativa
- AdonisJS - Um framework web completo com Node.js
- FoalTs - O Framework Nodejs Elegante
E muitos, muitos outros grandes projetos... Talvez até o seu próximo!