TypeScript and NestJS Overview

Concepts clés sur TypeScript et NestJS
Introduction au framework NestJS
  • Approche des microservices : Axé sur l'architecture orientée service (AOS).

  • Cours : Chemin d'architecte logiciel (M1).

  • Sujets clés :

    • Introduction au framework NestJS.

    • Récapitulatif sur TypeScript.

    • Conception axée sur le domaine (CAD).

    • Concepts d'architecture des microservices.

    • Mise en œuvre de l'architecture des microservices à l'aide de NestJS.

Aperçu de TypeScript

Objectifs de TypeScript (TS)

  • Fournit un système de type optionnel (typage incrémental).

  • Permet d'utiliser des fonctionnalités JavaScript futures dès maintenant.

  • Principales caractéristiques :

    • Vérification de type statique optionnelle.

    • Programmation orientée objet basée sur des classes.

    • Organisation modulaire.

    • Bénéficie des fonctionnalités ECMAScript 6 (ES6).

    • Syntaxe similaire aux langages de programmation de haut niveau comme Java.

Compilation de TypeScript

  • Le code TS n'est pas directement interprété par les moteurs JS (navigateurs ou Node.js).

  • Doit être transpilé en JS à l'aide du compilateur TypeScript (tsc).

  • Options de compilation définies dans le fichier tsconfig.json.

Typage dans TypeScript

  • Typage implicite (inférence) :

    • Exemple : var foo = 123;

    • Erreur si foo est réassigné à un type différent.

  • Typage explicite (annotations) :

    • Exemple : var foo: number = 123;

    • Les types non correspondants produisent une erreur.

  • Typage structurel :

    • Égalité déterminée par la structure du type plutôt que par leur nom.

  • Null vs Undefined :

    • null représente des variables non initialisées.

    • undefined indique l'absence de valeur.

Types spéciaux en TypeScript

  • Type Any : Peut accepter n'importe quel type ; flexible mais peut mener à des erreurs.

  • Types génériques : Paramétrisation des types pour un code plus flexible.

  • Types union : Permettent aux valeurs d'être l'un des plusieurs types.

  • Types intersection : Combiner plusieurs types en un seul.

  • Tuples : Tableaux de longueur fixe avec des types spécifiés pour chaque indice.

Décorateurs

  • But : Annotations qui fournissent un comportement supplémentaire sans modifier directement le code.

  • Doivent être activés dans tsconfig.json.

Modules

  • Déclarations par défaut dans un espace de noms global.

  • Utilisation de import/export pour les déclarations locales et l'organisation du code.

Détails du framework NestJS

Introduction

  • Construit sur Express.js pour les applications web.

  • Développé en TypeScript ; la productivité est améliorée grâce aux annotations.

  • Fournit une couche supplémentaire sur les frameworks Node.js comme Express/Fastify.

Éléments architecturaux dans NestJS

  • Contrôleurs : Gèrent le traitement des requêtes et la logique métier.

    • Exemple de contrôleur avec méthode utilisant des décorateurs pour le routage :

      typescript @Controller('simple') export class SimpleController { @Get('/convert/:inr') convert (@Param('inr') inr: number) { return inr * 80; } }

  • Services : Séparés de la logique métier ; marqués avec @Injectable.

  • Modules : Utiliser le décorateur @Module pour définir les métadonnées autour des modules, organisant la structure de l'application.

Modèles communs de NestJS

  • Annotations de routes : Utiliser des décorateurs pour le routage par méthode HTTP.

  • Validation (Pipes) : Assurer la validité des données en prétraitement, gère les erreurs d'entrée.

  • Transformations (Intercepteurs) : Modifier les réponses selon les besoins métier.

  • Dépôts : Accéder et manipuler des données, former la couche de données.

  • Gardiens : Implémenter la logique d'authentification et d'autorisation.

  • Middleware : Accéder aux objets de requête/réponse pour la journalisation, l'authentification, etc.

    • Exemple : Un middleware de journalisation qui enregistre la méthode de requête, l'URL, les en-têtes, le corps et les paramètres de requête.

Tests dans NestJS

  • Tests unitaires : Fichiers *.spec.ts pour les tests unitaires.

  • Tests d'intégration : Fichiers *.e2e-spec.ts pour les tests d'intégration (simulant des requêtes HTTP/TCP).

  • Exécuter des tests en utilisant :

    • npm run test : pour les tests unitaires

    • npm run test:e2e : pour les tests d'intégration.

Conclusion
  • Avantages de NestJS :

    • Système d'injection de dépendances pour découpler le code.

    • Routage bien conçu pour les points de terminaison API.

    • Middleware pour le pré- et le post-traitement des requêtes.

    • Installations de test intégrées permettant de simuler des dépendances.