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
fooest 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 :
nullreprésente des variables non initialisées.undefinedindique 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/exportpour 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
@Modulepour 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.tspour les tests unitaires.Tests d'intégration : Fichiers
*.e2e-spec.tspour les tests d'intégration (simulant des requêtes HTTP/TCP).Exécuter des tests en utilisant :
npm run test: pour les tests unitairesnpm 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.