IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

Implémenter une classe collection


Sujet :

TypeScript

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    octobre 2018
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : octobre 2018
    Messages : 210
    Points : 48
    Points
    48
    Par défaut Implémenter une classe collection
    Bonjour,

    Je suis en train de migrer des scripts entre Excel / VBA et Google Sheets / Apps Script. Apps Script est une variante de JavaScript, mais il est également possible de coder directement en TypeScript moyennant un module de conversion.

    Est-il possible d'implémenter une classe collection sous TypeScript ? (je m'y perds un peu avec les itérateurs et énumérateurs et je n'ai pas l'impression que ça permette de faire ce que je souhaite)

    Je souhaiterais implémeter une classe Fields et pouvoir utiliser la syntaxe fields.forEach(field => { ... field.prop1 ... field.prop2 ... })fields est une instance de Fields.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Field {
        prop1 : any;
        prop2 : object;
        // ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Fields {
        private _fields : Field[];
     
        constructor() {
            m_fields = new Array();
        }
     
        // ...
    }

    Merci par avance !

  2. #2
    Membre éclairé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2013
    Messages : 242
    Points : 660
    Points
    660
    Par défaut
    Bonjour, on itère sur les itérables avec une boucle "for of". La méthode "forEach" appartient aux arrays. Les arrays sont aussi des itérables, on peut donc boucler dessus avec "for of" ou via la méthode "forEach", au choix. Mais tous les itérables ne sont pas des arrays.

    Si vous souhaitez que votre collection "Fields" fournisse une méthode "forEach", vous pourriez l'implémenter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Fields {
        #fields: Field[] = [];
     
        forEach(cb: (item: Field) => void) {
            for (const item of this.#fields)
                cb(item);
        }
    }
    Mais, en toute franchise, personne ne fait ça. Dans la mesure où votre "collection" contient juste une array, en JavaScript (et donc en TypeScript) on opte souvent pour la simplicité. Vous pourriez simplement rendre cette array publique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Fields {
        readonly fields: Field[] = [];
    }
    Ensuite pour itérer dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const coll = new Fields();
    coll.fields.forEach(item => /* do something with 'item.prop1' */)
    Ou bien, pour transformer 'Fields' en un itérable tout en conservant la array privée (solution non compatible avec les navigateurs trop anciens) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Fields {
        #fields: Field[] = [];
     
        *[Symbol.iterator]() {
            for (const item of this.#fields)
                yield item;
        }
    }
    … et ça s'utilise alors avec "for of" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const coll = new Fields();
    for (const item of coll) {
        // Do something with 'item.prop1'
    }

Discussions similaires

  1. Implémenter une classe
    Par Lenou dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/06/2011, 11h10
  2. Implémenter une "classe-Association".
    Par oxyaxion dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 02/06/2011, 19h28
  3. Réponses: 5
    Dernier message: 29/12/2010, 16h13
  4. Réponses: 7
    Dernier message: 17/05/2006, 13h20
  5. Retrouver qui a implémenté une class de TObject.
    Par billbocquet dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2006, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo