Integração de Typescript com Express

Um exemplo prático de integração TypeScript com Express é a criação de uma pequena API REST usando tipagem forte, modularização e validação de tipos. Abaixo está um passo a passo resumido de um projeto típico, incluindo as principais dependências e a estrutura dos arquivos.

Instalação e Configuração

Crie a pasta do projeto e inicialize o Node:

mkdir minha-api-ts

cd minha-api-ts npm init -y

Instale as dependências principais:

npm install express

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

Crie um ficheiro de configuração TypeScript:

npx tsc --init

No tsconfig.json, ajuste:

{

"compilerOptions":

{

"target": "ES6",

"module": "commonjs",

"outDir": "./dist",

"rootDir": "./src",

"strict": true,

"esModuleInterop": true }

}

  • Estruture as pastas:
    • src/ para o código TypeScript
    • dist/ para o código JavaScript gerado

Exemplo de Código

Crie o ficheiro src/server.ts:

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

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

interface Utilizador {
id: number;
nome: string;
email: string;
}

let utilizadores: Utilizador[] = [];

app.get('/utilizadores', (req: Request, res: Response) => {
res.json(utilizadores);
});

app.post('/utilizadores', (req: Request, res: Response) => {
const novoUtilizador: Utilizador = req.body;
utilizadores.push(novoUtilizador);
res.status(201).json(novoUtilizador);
});

const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});

Execução

Adicione ao package.json para rodar o projeto em desenvolvimento:

"scripts": { "dev": "ts-node-dev --respawn src/server.ts" }

Execute: npm run dev

Aceda a http://localhost:3000/utilizadores no seu navegador ou via ferramenta API.

Benefícios e Práticas Recomendadas

  • Use interfaces para definir a estrutura dos objetos e garantir tipagem estática.
  • Organize o código em módulos para facilidade de manutenção.
  • Aproveite recursos do TypeScript como classes e herança, se necessário.

Notas sobre os módulos instalados

A instrução npm install --save-dev typescript @types/node @types/express ts-node-dev serve para configurar um ambiente de desenvolvimento Node.js com TypeScript e algumas ferramentas de produtividade específicas para projetos TypeScript. Cada módulo tem uma função específica:

Explicação dos Módulos Instalados

typescript

  • É o compilador principal de TypeScript para JavaScript.
  • Necessário para transcrever arquivos .ts para .js e garantir verificações de tipos durante o desenvolvimento.

@types/node e @types/express

  • São pacotes de definições de tipos (type definitions).
  • @types/node adiciona ao TypeScript informações sobre todas as APIs nativas do Node.js (como fs, path, http), permitindo autocomplete, checagem de tipos e code completion específicos do Node.js.
  • @types/express faz o mesmo para o framework Express, trazendo descrições de tipos para rotas, métodos, objetos de requisição/resposta, etc., fundamentais para programar barras APIs com Express em TypeScript.

Esses pacotes geralmente acompanham qualquer biblioteca JavaScript popular que não inclua tipos próprios; se não vierem embutidos, o padrão é instalar @types/nome-do-pacote.

ts-node-dev

  • É uma ferramenta que permite executar arquivos TypeScript diretamente, sem compilar manualmente para JavaScript antes.
  • Faz o hot reload: observa mudanças no código fonte e reinicia o servidor automaticamente, facilitando o desenvolvimento. É voltada apenas para ambiente de desenvolvimento, assim como as definições de tipos.

Resumindo

  • @types/node: Tipos das APIs do Node.js para TypeScript.
  • @types/express: Tipos do framework Express para TypeScript.
  • ts-node-dev: Executa e reinicia aplicações TypeScript automaticamente em ambiente dev, sem precisar compilar manualmente.
  • Estes pacotes ficam em devDependencies (--save-dev) porque só são necessários durante o desenvolvimento, não em produção.