TypeScript com Node.js: Criando APIs Tipadas

18/09/2024

Por Que Usar TypeScript com Node.js?

O Node.js é uma plataforma amplamente utilizada para criar APIs e aplicativos de back-end. Quando combinado com TypeScript, ele oferece a vantagem da tipagem estática, o que ajuda a evitar erros de tempo de execução, melhora a manutenção e proporciona uma melhor experiência de desenvolvimento. Criar APIs com TypeScript em vez de JavaScript puro permite que você defina tipos para parâmetros, respostas e dados processados, tornando o código mais seguro e legível.

Configurando o Ambiente de Desenvolvimento

Antes de criar sua API, é necessário configurar o ambiente com Node.js e TypeScript. Para isso, siga os passos abaixo:

1. Inicializando o Projeto

Crie uma nova pasta para o projeto e inicialize um novo projeto Node.js com o seguinte comando:

mkdir minha-api
cd minha-api
npm init -y

O comando npm init -y cria o arquivo package.json, que gerencia as dependências do projeto.

2. Instalando TypeScript e Dependências

Instale o TypeScript e suas dependências relacionadas ao Node.js:

npm install typescript ts-node @types/node express @types/express

O typescript é o compilador TypeScript, o ts-node permite rodar arquivos TypeScript diretamente no Node.js, e as dependências @types/node e @types/express contêm as definições de tipos para Node.js e Express.

3. Configurando o TypeScript

Crie um arquivo tsconfig.json com as configurações do TypeScript:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Esse arquivo define opções importantes como o alvo da compilação e o uso de módulos CommonJS, que são padrão no Node.js.

Criando uma API com Express e TypeScript

Agora que o ambiente está configurado, vamos criar uma API simples utilizando o Express e TypeScript.

1. Criando o Servidor

Crie um arquivo src/index.ts e adicione o código para configurar o servidor Express:

import express, { Request, Response } from 'express';

const app = express();
const porta = 3000;

app.use(express.json());

app.get('/', (req: Request, res: Response) => {
  res.send('API rodando com TypeScript e Express');
});

app.listen(porta, () => {
  console.log(`Servidor rodando na porta ${porta}`);
});

Neste código, estamos configurando um servidor Express simples que responde à rota raiz / com uma mensagem. Note que as definições de tipo Request e Response são importadas do Express, garantindo que a tipagem das requisições e respostas esteja correta.

2. Criando Rotas Tipadas

Vamos adicionar uma rota que recebe um parâmetro e responde com uma mensagem personalizada. Modifique o arquivo src/index.ts da seguinte maneira:

app.get('/saudacao/:nome', (req: Request, res: Response) => {
  const { nome } = req.params;
  res.send(`Olá, ${nome}!`);
});

Com isso, criamos uma rota que aceita um parâmetro nome e responde com uma saudação personalizada. O TypeScript garante que o parâmetro nome esteja disponível e seja do tipo correto.

Tipos para Requisições e Respostas

No TypeScript, é possível definir tipos para os dados enviados e recebidos em requisições HTTP. Isso ajuda a garantir que as APIs lidem corretamente com os dados e que a aplicação esteja preparada para tratar qualquer tipo de erro.

1. Tipando Requisições POST

Vamos criar uma rota POST que aceita dados de um novo usuário e retorna esses dados como resposta. Primeiro, crie uma interface para definir o formato dos dados do usuário:

interface Usuario {
  nome: string;
  idade: number;
}

app.post('/usuario', (req: Request, res: Response) => {
  const usuario: Usuario = req.body;
  res.status(201).json(usuario);
});

Nesse exemplo, criamos uma interface Usuario para tipar os dados enviados no corpo da requisição. Isso garante que o TypeScript verifique se o objeto usuario possui as propriedades esperadas, como nome e idade.

Boas Práticas no Desenvolvimento de APIs com TypeScript

  • Defina Tipos para Todas as Requisições e Respostas: Isso garante que seu código seja mais seguro e previsível, ajudando a evitar erros e inconsistências.
  • Use Interfaces para Estruturas de Dados: Criar interfaces para as entradas e saídas das suas APIs torna o código mais legível e fácil de manter.
  • Implemente Middleware para Validação de Dados: Valide os dados recebidos nas requisições antes de processá-los para evitar problemas no back-end.
  • Utilize Classes para Organizar Lógicas Complexas: Para APIs maiores, considere usar classes e métodos para organizar a lógica de negócio e garantir uma boa separação de responsabilidades.

Conclusão

Usar TypeScript com Node.js para criar APIs é uma excelente maneira de garantir que seu código seja mais seguro, legível e fácil de manter. A tipagem estática do TypeScript reduz a quantidade de erros que podem ocorrer em tempo de execução e melhora a produtividade do desenvolvedor. Ao definir tipos para as requisições, respostas e estruturas de dados, você garante que sua API seja robusta e confiável, pronta para crescer de forma escalável.