Node.js com TypeScript

Fala, pessoal! Neste post vou mostrar como você pode desenvolver no Node.js usando TypeScript e ter os benefícios desta linguagem também no backend.

ts-node-dev

Para fazer a transpilação do código TypeScript para JavaScript, vamos usar o ts-node-dev.

Ele fornece um executável que vamos usar no lugar do Node para rodar o código TypeScript. Por baixo dos panos ele vai transformar o TypeScript em JavaScript e executar usando o próprio Node.

Outra coisa legal do ts-node-dev é que ele substitui o nodemon também, então sempre que alterarmos algum arquivo .ts ele vai pegar a alteração e recarregar a aplicação.

Setup

Vamos precisar do ts-node-dev e do próprio typescript como dependências de desenvolvimento:

npm i -D ts-node-dev typescript

Também vamos precisar de um arquivo de configurações para o compilador do TypeScript. Podemos gerar uma configuração padrão com o comando:

npx tsc --init

Ele vai criar um tsconfig.json na raiz da aplicação. Você pode customizar as opções, mas o default já vai servir pra gente.

Escrevendo o código

Com este setup já podemos escrever o código da aplicação usando arquivos .ts e todas as funcionalidades do TypeScript.

Como exemplo, vamos criar um “Hello World” com Express.js.

Vamos precisar instalar o próprio express, e também as definições de tipos para ele. Note que o express é dependência da aplicação, enquanto as definições de tipos são dependências de desenvolvimento.

npm i express
npm i -D @types/express

Algumas bibliotecas já fornecem as próprias definições de tipo, então esta segunda instalação não é necessária. Você vai descobrir se uma lib precisa quando tentar importá-la no código e o editor reclamar que estão faltando as definições de tipo.

Para o nosso “Hello, World” vou escrever este código em um arquivo index.ts:

import express, { json } from "express";

const app = express();
app.use(json());

app.get("/", (request, response) => {
  return response.json({ message: "Hello, TypeScript!" });
});

app.listen(3000, () => {
  console.log("🚀 Server started on http://localhost:3000");
});

Veja que podemos usar o padrão ES Modules (import … from …).

Executando a aplicação

Para executar a aplicação, vamos adicionar no script de start, do package.json:

"start": "ts-node-dev --transpileOnly --ignore-watch node_modules index.ts"

Aqui temos algumas opções para agilizar o processo de transpilação:

--transpileOnly vai dizer para ele apenas transpilar, sem fazer verificação de tipos. Esta verificação pode ser feita direto no editor, de forma muito mais ágil, apontando exatamente no seu código onde estão os erros.

--ignore-watch node_modules está dizendo para ignorar arquivos do node_modules, já que não vamos mexer nestes arquivos e esperamos que eles já estejam em JavaScript.

Em produção

Em produção, como queremos o máximo de performance, vamos usar diretamente o Node com o código transpilado em JavaScript. Para isso podemos adicionar um script de build:

"build": "tsc"

Ele vai usar o compilador do TypeScript para transpilar todo o código .ts e salvar os .js correspondentes no disco.

Conclusão

O código final deste exemplo está aqui: https://github.com/doug2k1/node-typescript

O TypeScript tem muitas vantagens, e a cada dia a integração com outras ferramentas está cada vez madura. Está cada vez mais fácil adotar, seja no frontend ou backend, e é uma opção cada vez mais interessante para a maioria dos projetos.

Tags: |

Sobre o Autor

Douglas Matoso
Douglas Matoso

Desenvolvedor web desde 2008. Criador do Web Dev Drops.

2 Comentários

  1. Rapaz, eu nunca comentei em nenhum blog, mas você merece um comentário, tá de parabéns! simples e direto ao ponto. Em outras publicações da internet o pessoal costumar encher de firula, o que eu não acho necessário, se eu quiser configurar mais detalhes é só eu procurar, gostei do jeito objetivo que você abordou o assunto.


Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *