méthode typescript que je ne comprends pas

méthode typescript que je ne comprends pas - Javascript/Node.js - Programmation

Marsh Posté le 18-02-2024 à 19:07:47    

Bonjour,
 
Etant noob en typescript (venant de PHP et javascript le passage à un language un peu typé est assez heu compliqué :D),  
je suis entrain de suivre un cours écrit sur ... Typescript, et dans le cadre de la mise en pratique, il est demandé de créer un annuaire d’entreprise permettant de gérer les employés d’une société, et ce en suivant l'architecture REST et le pattern MVC.
 
Et pour l'instant, je ne comprends pas la méthode register (je ne suis pas très à l'aise avec la syntaxe liée à la programmation fonctionnelle, surtout quand on utilise une fonction comme paramètre d'une méthode):
la syntaxe me semble très abstraite et peu lisible.
 
Le role de cette méthode est le suivant:

Ajoutez une méthode register acceptant un paramètre correspondant au type d’un constructeur de contrôleur. Cette méthode instancie le contrôleur et l’ajoute dans la liste des contrôleurs.

 

Code :
  1. register(ctor: new () => unknown) {
  2.   this.#controllers.set(ctor.name, new ctor());
  3. }


 
Pourriez-vous m'aider à décortiquer le paramètre de la fonction et comment ce paramètre est utilisé ?
 
le reste du code ne me pose pas de problème.
 
le code complet de la classe est le suivant:
 

Code :
  1. export class ControllerFactory {
  2.   static #instance: ControllerFactory;
  3.   readonly #controllers: Map<string, unknown> = new Map();
  4.   static getInstance(): ControllerFactory {
  5.     if(!this.#instance) {
  6.       this.#instance = new ControllerFactory();
  7.     }
  8.     return this.#instance;
  9.   }
  10.   register(ctor: new () => unknown) {
  11.     this.#controllers.set(ctor.name, new ctor());
  12.   }
  13.   get(controllerName: string) {
  14.     const controller = this.#controllers.get(controllerName);
  15.  
  16.     if(!controller) {
  17.       throw new Error(`Unknown controller: ${controllerName}`);
  18.     }
  19.     return controller;
  20.   }
  21. }


 
 
merci pour votre aide  :)


Message édité par tompouss le 18-02-2024 à 19:20:22

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 18-02-2024 à 19:07:47   

Reply

Marsh Posté le 19-02-2024 à 16:44:03    


 

Code :
  1. register(ctor: new () => unknown) {
  2.   this.#controllers.set(ctor.name, new ctor());
  3. }


 
 
 

  • register(ctor: new () => unknown) : Déclare une méthode register qui prend un argument ctor. L'argument ctor est typé avec new () => unknown, ce qui signifie qu'il attend une classe ou une fonction constructeur qui, lorsqu'elle est invoquée avec new, ne prend aucun argument et retourne une instance de type inconnu (unknown). C'est une manière de dire que cette méthode peut accepter n'importe quelle classe constructeur.


  • this.#controllers : Fait référence à un champ privé de la classe nommé controllers. Les champs privés en TypeScript sont préfixés par "#" et ne peuvent donc être accédés ou modifiés que depuis l'intérieur de la classe qui les déclare. Cela suggère que #controllers est probablement une collection (comme une Map) utilisée pour stocker des instances.


  • .set(ctor.name, new ctor()) : Appelle la méthode set sur l'objet #controllers. ctor.name obtient le nom de la classe constructeur passée comme argument à la méthode register, ce qui est utilisé comme clé dans la collection. new ctor() crée une nouvelle instance de la classe constructeur, qui est ensuite stockée dans la collection avec la clé correspondante. Cela permet d'enregistrer dynamiquement des instances de diverses classes dans la collection, en les identifiant par leur nom de classe.

Reply

Marsh Posté le 25-02-2024 à 10:52:31    

Demodex a écrit :


 

Code :
  1. register(ctor: new () => unknown) {
  2.   this.#controllers.set(ctor.name, new ctor());
  3. }


 
 
 

  • register(ctor: new () => unknown) : Déclare une méthode register qui prend un argument ctor. L'argument ctor est typé avec new () => unknown, ce qui signifie qu'il attend une classe ou une fonction constructeur qui, lorsqu'elle est invoquée avec new, ne prend aucun argument et retourne une instance de type inconnu (unknown). C'est une manière de dire que cette méthode peut accepter n'importe quelle classe constructeur.


  • this.#controllers : Fait référence à un champ privé de la classe nommé controllers. Les champs privés en TypeScript sont préfixés par "#" et ne peuvent donc être accédés ou modifiés que depuis l'intérieur de la classe qui les déclare. Cela suggère que #controllers est probablement une collection (comme une Map) utilisée pour stocker des instances.


  • .set(ctor.name, new ctor()) : Appelle la méthode set sur l'objet #controllers. ctor.name obtient le nom de la classe constructeur passée comme argument à la méthode register, ce qui est utilisé comme clé dans la collection. new ctor() crée une nouvelle instance de la classe constructeur, qui est ensuite stockée dans la collection avec la clé correspondante. Cela permet d'enregistrer dynamiquement des instances de diverses classes dans la collection, en les identifiant par leur nom de classe.

désolé pour cette réponse tardive, mais j'ai été malade toute la semaine, du coup j'avais pas trop la tête à faire du typescript.
Merci pour ton explication c'est déjà un peu plus clair.


---------------
collectionneur de pâtes thermiques
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed