Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1021 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  méthode typescript que je ne comprends pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

méthode typescript que je ne comprends pas

n°2464452
tompouss
Petit chat
Posté le 18-02-2024 à 19:07:47  profilanswer
 

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
mood
Publicité
Posté le 18-02-2024 à 19:07:47  profilanswer
 

n°2464498
Demodex
La vie en rose
Posté le 19-02-2024 à 16:44:03  profilanswer
 


 

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.

n°2464775
tompouss
Petit chat
Posté le 25-02-2024 à 10:52:31  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  méthode typescript que je ne comprends pas

 

Sujets relatifs
Utiliser la mauvaise méthodeExercice sur typescript
[résolu] Typage fort et valeur null dans paramétre d'une méthodeBug dans méthode JAVA
méthode pour trouver les répertoires qui ne contiennent pasMéthode de nommage des variables
Méthode Agile : qui est responsable des délais et de l'avancement ?Que pensez-vous de ma méthode pour créer une API REST ?
Utilisation d'une méthode de class en tant que fonction de callbackMéthode pour placer tous les mots du dictionnaire dans une phrase.
Plus de sujets relatifs à : méthode typescript que je ne comprends pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR