TypeScript y PostgreSQL: guía completa para crear un backend robusto

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué TypeScript y PostgreSQL son la pareja ideal para tu proyecto

\n\n

¿Alguna vez te has preguntado por qué los desarrolladores eligen cada vez más la combinación de TypeScript y PostgreSQL? No es solo una tendencia de moda, es un tándem poderoso que cambia las reglas del juego en el desarrollo web moderno. Imagina una navaja suiza y una caja fuerte confiable en un solo paquete: TypeScript aporta rigor y previsibilidad al código, mientras que PostgreSQL ofrece confiabilidad y flexibilidad en el almacenamiento de datos.

\n\n

En esta guía no solo repasaremos la teoría. Nos sumergiremos en la práctica real: configuraremos la conexión, escribiremos consultas, crearemos una API y aprenderemos a evitar errores típicos. ¿Listo? ¡Vamos allá!

\n\n

Configuración del entorno: por dónde empezar con TypeScript y PostgreSQL

\n\n

Antes de escribir código, preparemos el terreno. La instalación de dependencias es como los cimientos de una casa: cuanto más sólidos, más tiempo durará el proyecto.

\n\n

Instalación de los paquetes necesarios

\n\n

Necesitaremos dos herramientas principales: pg (cliente para PostgreSQL) y typescript con sus tipos. Ejecuta en la terminal:

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

Ten en cuenta: instalamos los tipos para pg por separado. Esto es un requisito obligatorio para trabajar con una base de datos en TypeScript; de lo contrario, el compilador se quejará por la falta de tipos.

\n\n

Estructura básica del proyecto

\n\n

Crea el archivo database.ts — este será el corazón de la conexión. Aquí tienes una plantilla mínima pero 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 qué Pool y no un cliente normal? Pool gestiona un grupo de conexiones, lo cual es crítico para producción. Imagina que cada solicitud es un visitante de un café. Sin el pool, abrirías un nuevo café para cada cliente. Con el pool, ya tienes varias mesas y simplemente sientas a los invitados.

\n\n

Operaciones básicas: CRUD en TypeScript con PostgreSQL

\n\n

Ahora viene lo más interesante: escribir consultas. Crearemos una tabla simple de usuarios e implementaremos las cuatro operaciones: Create, Read, Update, Delete.

\n\n

Creación de la tabla

\n\n

Antes de trabajar con datos, necesitamos crear la estructura. Así se hace desde 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('Tabla users creada');\n  } catch (error) {\n    console.error('Error:', error);\n  }\n}\n\ncreateTable();\n
\n\n

Observa SERIAL — es un autoincremento que PostgreSQL genera por sí mismo. Y CHECK garantiza que la edad sea positiva. Este es un ejemplo de cómo PostgreSQL TypeScript juntos aseguran la integridad de los datos en dos niveles.

\n\n

Inserción de datos (Create)

\n\n

La inserción con parámetros es una forma segura de evitar la inyección 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('Usuario añadido:', result.rows[0]);\n    return result.rows[0];\n  } catch (error) {\n    console.error('Error al añadir:', error);\n    throw error                

Blogs

Book Recommendations