Introduction : pourquoi TypeScript et PostgreSQL sont le duo idéal pour votre projet
\n\nAvez-vous déjà réfléchi à la raison pour laquelle les développeurs choisissent de plus en plus la combinaison TypeScript et PostgreSQL ? Ce n'est pas simplement une tendance à la mode – c'est un tandem puissant qui change les règles du jeu dans le développement web moderne. Imaginez un couteau suisse et un coffre-fort fiable en un seul produit : TypeScript apporte rigueur et prévisibilité au code, tandis que PostgreSQL offre fiabilité et flexibilité pour le stockage des données.
\n\nDans ce guide, nous ne nous contenterons pas de survoler la théorie. Nous plongerons dans la pratique réelle : configurer la connexion, écrire des requêtes, créer une API et comprendre comment éviter les erreurs typiques. Prêt ? C'est parti !
\n\nConfiguration de l'environnement : par où commencer avec TypeScript et PostgreSQL
\n\nAvant d'écrire du code, préparons le terrain. L'installation des dépendances, c'est comme les fondations d'une maison : plus elles sont solides, plus le projet durera longtemps.
\n\nInstallation des paquets nécessaires
\n\nNous aurons besoin de deux outils principaux : pg (client pour PostgreSQL) et typescript avec les types. Exécutez dans le terminal :
npm init -y\nnpm install pg\nnpm install -D typescript @types/node @types/pg\nnpx tsc --init\n\n\nRemarque : nous installons les types pour pg séparément. C'est une condition obligatoire pour travailler avec une base de données TypeScript – sinon le compilateur se plaindra de l'absence de types.
Structure de base du projet
\n\nCréez un fichier database.ts – ce sera le cœur de notre connexion. Voici un modèle minimal mais fonctionnel :
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\nPourquoi Pool et pas un client ordinaire ? Pool gère un pool de connexions, ce qui est crucial pour la production. Imaginez que chaque requête est un visiteur de café. Sans pool, vous ouvririez un nouveau café pour chaque client. Avec un pool, vous avez déjà plusieurs tables et vous installez simplement les invités.
Opérations de base : CRUD en TypeScript avec PostgreSQL
\n\nMaintenant, le plus intéressant – l'écriture de requêtes. Nous allons créer une table utilisateurs simple et implémenter les quatre opérations : Create, Read, Update, Delete.
\n\nCréation de la table
\n\nAvant de travailler avec les données, il faut créer la structure. Voici comment faire via TypeScript :
\n\nimport 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('Table users créée');\n } catch (error) {\n console.error('Erreur :', error);\n }\n}\n\ncreateTable();\n\n\nRemarquez SERIAL – c'est un auto-incrément que PostgreSQL génère lui-même. Et CHECK garantit que l'âge sera positif. C'est un exemple de la façon dont PostgreSQL TypeScript assurent ensemble l'intégrité des données à deux niveaux.
Ajout de données (Create)
\n\nL'insertion avec paramètres est une méthode sûre pour éviter les injections SQL :
\n\ninterface 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('Utilisateur ajouté :', result.rows[0]);\n return result.rows[0];\n } catch (error) {\n console.error('Erreur lors de l\\'ajout :', error);\n throw error