DEV Community

Cover image for Como configurar uma API Node.js com TypeScript em 2025
CodeInit
CodeInit

Posted on • Edited on

3

Como configurar uma API Node.js com TypeScript em 2025

Hoje em dia, criar uma API eficiente e escalável com Node.js e TypeScript é mais simples e poderoso do que nunca. No CodeInit, gostamos de abordar tutoriais de maneira prática e direta, ajudando você a construir soluções profissionais que o mercado realmente pede. Neste artigo, vou te mostrar, passo a passo, como configurar uma API moderna utilizando as melhores práticas para 2025.

Se você é iniciante ou mesmo um desenvolvedor experiente buscando acelerar seu workflow, este guia é para você. Vamos juntos nessa jornada!

Por que usar Node.js e TypeScript?

Node.js continua sendo uma das tecnologias mais populares para backend, e quando combinado com TypeScript, você tem o melhor dos dois mundos: velocidade e segurança. TypeScript adiciona tipagem estática, o que torna seu código mais fácil de manter e reduz erros comuns.

Em 2025, é fundamental dominar ferramentas que trazem produtividade e que estão alinhadas com o mercado.

O que você precisa antes de começar

Antes de iniciar, você precisa garantir que o ambiente está preparado. Aqui estão os pré-requisitos:

  • Node.js 20 ou superior
  • Editor de texto - Recomendo o Visual Studio Code
  • Conhecimento básico de JavaScript e terminal
  • npm, yarn ou pnpm instalado no sistema

Dica: Use o terminal integrado do VS Code para seguir este tutorial mais facilmente.

Eu particularmente gosto de usar o pnpm. Para instlar o pnpm globalmente utitlize o comando abaixo:

npm i -g pnpm
Enter fullscreen mode Exit fullscreen mode

Passo 1: Configurando o ambiente

Primeiro, certifique-se de que o Node.js está instalado:

node -v
Enter fullscreen mode Exit fullscreen mode

Se tudo estiver certo, você deve ver a versão do Node.js. Caso contrário, instale a versão mais recente pelo site oficial.

Agora, vamos criar a estrutura do projeto:

mkdir minha-api && cd minha-api
pnpm init -y
Enter fullscreen mode Exit fullscreen mode

Esse comando cria o arquivo package.json, que gerencia as dependências do projeto.

Passo 2: Instalando o TypeScript

TypeScript é essencial para quem busca manutenção e organização em projetos maiores. Vamos instalá-lo:

pnpm install typescript tsx @types/node -D
Enter fullscreen mode Exit fullscreen mode

Agora, configure o TypeScript criando um arquivo tsconfig.json:

npx tsc --init
Enter fullscreen mode Exit fullscreen mode

Edite o arquivo para refletir as melhores práticas de 2025:

{
   "compilerOptions": {
    "target": "ES2022",
    "module": "CommonJS",
    "strict": true,
    "outDir": "dist",
    "rootDir": "src"
  }
}
Enter fullscreen mode Exit fullscreen mode

Crie o diretório src onde vamos organizar nosso código:

mkdir src
Enter fullscreen mode Exit fullscreen mode

Passo 3: Adicionando ESLint

Manter um código limpo é crucial. Vamos adicionar o ESLint para garantir qualidade e padronização.

Utilize o comando abaixo para configurar o ESLint:

pnpm create @eslint/config@latest
Enter fullscreen mode Exit fullscreen mode

Configurações recomendadas para o ESLint

  • How would you like to use ESLint? (To check syntax and find problems)
  • What type of modules does your project use? (JavaScript modules (import/export)
  • Which framework does your project use? (None)
  • Does your project use TypeScript? (Yes)
  • Where does your code run? (Node)
  • Would you like to install them now? (Yes)

Apos a instalação, o arquivo eslint.config.js será criado na raiz do seu projeto.

Abaixo eu vou deixar a minha configuração, mas você configurar o ESlint com as regras que desejar.

import pluginJs from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'

/** @type {import('eslint').Linter.Config[]} */
export default [
  {files: ['**/*.{js,mjs,cjs,ts}']},
  {languageOptions: { globals: globals.node }},
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  {
    rules: {
      semi: 'off',
      quotes: ['error', 'single']
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

Vamos agora criar os comandos para executar o ESlint, adione os scripts no package.json:

...
"scripts": {
  "lint": "npx eslint ./src/**",
  "lint:fix": "npx eslint ./src/** --fix"
}
Enter fullscreen mode Exit fullscreen mode

O primeiro comando roda o ESlint e mostra os erros no console, o segundo tenta fazer o fix do erros de forma automatica.

Execute no terminal:

pnpm lint
Enter fullscreen mode Exit fullscreen mode

ou

pnpm lint:fix
Enter fullscreen mode Exit fullscreen mode

Passo 4: Construindo a API

Criando a rota de saúde

Agora é hora de colocar a mão na massa e criar nossa API. Vamos usar o Express, um framework minimalista para Node.js.

Instale o Express e seus tipos:

pnpm add express @types/express
Enter fullscreen mode Exit fullscreen mode

Crie o arquivo src/index.ts e adicione o seguinte código:

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

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

// Rota de saúde com tipos definidos
app.get('/health', (req: Request, res: Response) => {
  res.status(200).json({ status: 'API rodando com sucesso!' });
})

app.listen(3000, () => {
  console.log('Servidor rodando na porta 3000');
})
Enter fullscreen mode Exit fullscreen mode

Para rodar o servidor, adicione o seguinte script ao package.json:

...
"scripts": {
  ...,
  "start": "tsx watch src/index.ts"
}
Enter fullscreen mode Exit fullscreen mode

E execute: npm start

Você deve ver a mensagem: "Servidor rodando na porta 3000". Teste acessando: http://localhost:3000/health para verificar a saúde da API.

Adicionando a rota de Pokémons

Agora vamos expandir a API com uma rota que retorna uma lista de Pokémons.

Atualize o arquivo src/index.ts adicionando o seguinte código:

// Interface para definir o tipo de um Pokémon
interface Pokemon {
  id: number;
  name: string;
  type: string;
}

// Dados de exemplo
const pokemons: Pokemon[] = [
  { id: 1, name: 'Pikachu', type: 'Electric' },
  { id: 2, name: 'Charmander', type: 'Fire' },
  { id: 3, name: 'Bulbasaur', type: 'Grass/Poison' }
]

// Rota que retorna a lista de Pokémons
app.get('/pokemons', (req: Request, res: Response<Pokemon[]>) => {
  res.status(200).json(pokemons)
})
Enter fullscreen mode Exit fullscreen mode

Agora teste acessando: http://localhost:3000/pokemons para obter a lista de Pokémons.

Conclusão

Neste guia, você aprendeu como configurar uma API moderna com Node.js e TypeScript, começando com uma rota simples e expandindo para incluir dados tipados. Este é apenas o começo! Com essa base, você pode implementar autenticação, conexão com bancos de dados e muito mais.

Se este artigo foi útil, compartilhe com outros desenvolvedores e inscreva-se na nossa newsletter para não perder as próximas dicas. Vamos juntos dominar o mundo do desenvolvimento!

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (0)