Skip to content

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:

ts
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:

bash
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:

bash
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:

ts
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:

bash
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:

bash
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:

bash
npm install -D ts-node

Então você pode executar seu código TypeScript assim:

bash
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:

bash
npm install -D tsx

Então você pode executar seu código TypeScript assim:

bash
npx tsx example.ts

Se você quiser usar tsx via node, você pode registrar tsx via --import:

bash
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!