TypeScript e PostgreSQL: guia completo para criar um backend robusto

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que TypeScript e PostgreSQL são a combinação ideal para o seu projeto

\n\n

Você já se perguntou por que os desenvolvedores estão cada vez mais escolhendo a combinação TypeScript e PostgreSQL? Não é apenas uma tendência da moda — é uma dupla poderosa que está mudando as regras do jogo no desenvolvimento web moderno. Imagine um canivete suíço e um cofre confiável em um só: o TypeScript traz rigor e previsibilidade ao código, enquanto o PostgreSQL oferece confiabilidade e flexibilidade no armazenamento de dados.

\n\n

Neste guia, não vamos apenas passar pela teoria. Vamos mergulhar na prática real: configurar a conexão, escrever consultas, criar uma API e entender como evitar erros comuns. Pronto? Vamos lá!

\n\n

Configuração do ambiente: por onde começar com TypeScript e PostgreSQL

\n\n

Antes de escrever código, vamos preparar o terreno. A instalação das dependências é como a fundação de uma casa: quanto mais sólida, mais tempo o projeto vai durar.

\n\n

Instalação dos pacotes necessários

\n\n

Vamos precisar de duas ferramentas principais: pg (cliente para PostgreSQL) e typescript com os tipos. Execute no terminal:

\n\n
npm init -y\nnpm install pg\nnpm install -D typescript @types/node @types/pg\nnpx tsc --init\n
\n\n

Observe: instalamos os tipos para pg separadamente. Isso é obrigatório para trabalhar com banco de dados TypeScript — caso contrário, o compilador reclamará da falta de tipos.

\n\n

Estrutura básica do projeto

\n\n

Crie o arquivo database.ts — este será o coração da nossa conexão. Aqui está um modelo mínimo, mas funcional:

\n\n
import { Pool } from 'pg';\n\nconst pool = new Pool({\n  user: 'your_username',\n  host: 'localhost',\n  database: 'your_database',\n  password: 'your_password',\n  port: 5432,\n});\n\nexport default pool;\n
\n\n

Por que Pool e não um cliente comum? O Pool gerencia um pool de conexões, o que é essencial para produção. Imagine que cada requisição é um visitante de um café. Sem o pool, você abriria um novo café para cada cliente. Com o pool, você já tem algumas mesas prontas e apenas acomoda os convidados.

\n\n

Operações básicas: CRUD em TypeScript com PostgreSQL

\n\n

Agora a parte mais interessante — escrever consultas. Vamos criar uma tabela simples de usuários e implementar todas as quatro operações: Create, Read, Update, Delete.

\n\n

Criação da tabela

\n\n

Antes de trabalhar com dados, precisamos criar a estrutura. Veja como fazer isso via TypeScript:

\n\n
import pool from './database';\n\nasync function createTable() {\n  const query = `\n    CREATE TABLE IF NOT EXISTS users (\n      id SERIAL PRIMARY KEY,\n      name VARCHAR(100) NOT NULL,\n      email VARCHAR(255) UNIQUE NOT NULL,\n      age INTEGER CHECK (age > 0),\n      created_at TIMESTAMP DEFAULT NOW()\n    );\n  `;\n  \n  try {\n    await pool.query(query);\n    console.log('Tabela users criada');\n  } catch (error) {\n    console.error('Erro:', error);\n  }\n}\n\ncreateTable();\n
\n\n

Observe o SERIAL — é um auto-incremento que o PostgreSQL gera automaticamente. E o CHECK garante que a idade seja positiva. Isso é um exemplo de como PostgreSQL TypeScript juntos garantem a integridade dos dados em dois níveis.

\n\n

Adicionar dados (Create)

\n\n

Inserção com parâmetros é uma forma segura de evitar injeção SQL:

\n\n
interface User {\n  name: string;\n  email: string;\n  age: number;\n}\n\nasync function addUser(user: User) {\n  const query = `\n    INSERT INTO users (name, email, age)\n    VALUES ($1, $2, $3)\n    RETURNING *;\n  `;\n  \n  const values = [user.name, user.email, user.age];\n  \n  try {\n    const result = await pool.query(query, values);\n    console.log('Usuário adicionado:', result.rows[0]);\n    return result.rows[0];\n  } catch (error) {\n    console.error('Erro ao adicionar:', error);\n    throw error                

Blogs

Book Recommendations