Classes TypeScript

Définition et syntaxe

Les classes sont disponibles à partir de JavaScript ES6 et en TypeScript. Comme dans tous les langages objet, une classe est une empreinte servant à créer des objets, chaque objet contenant un mélange de données (propriétés) et de code (méthodes).

On déclare une classe avec le mot-clé class suivi du nom de la classe en PascalCase et d’une paire d’accolades { }.

class Person {
  name: string;

  constructor(theName: string) {
    this.name = theName;
  }

  sayMyName() {
    console.log('Mon nom est ' + this.name);
  }
}

Dans l’exemple, la classe Person possède 3 membres :

  • une propriété name ;
  • un constructeur, qui est une méthode spéciale exécutée à chaque fois qu’on crée une instance de la classe avec new Person() ;
  • une méthode sayMyName().

Tous ces membres sont facultatifs (le corps de la classe pourrait être vide). Il pourrait également y avoir plusieurs propriétés et plusieurs méthodes, mais en général il n’y a qu’un seul constructeur (ou aucun).

Les membres peuvent être déclarés dans n’importe quel ordre, mais la convention est de respecter l’ordre suivant : propriétés, constructeur, méthodes. On utilise la notation camelCase pour les noms de membre.

Dans les méthodes de classe, on doit accéder aux autres membres de la classe via le préfixe this, par exemple this.name ou this.sayMyName(). Ce préfixe est obligatoire pour accéder aux autres membres.

Visibilité des membres (public, private, protected)

Tous les membres d’une classe sont publiques par défaut, comme si le mot-clé public avait été utilisé explicitement.

Autrement dit, les deux syntaxes ci-dessous sont équivalentes :

class Person {
  sayMyName() {    // `public` implicite
    console.log('Salut Vince');
  }
}

class Person {
  public sayMyName() {
    console.log('Salut Vince');
  }
}

Utilisez le mot-clé private pour qu’un membre ne soit pas accessible à l’extérieur de la classe, ou protected pour qu’il ne soit accessible que dans la classe et ses descendants.

Par exemple :

class Person {
  private sayMyAge() {
    console.log('Je ne veux pas dire mon âge...');
  }
}

const p = new Person();
p.sayMyAge();  // ERREUR, car une méthode `private` n'est pas accessible depuis l'extérieur

Propriété-paramètre

Dans l’exemple ci-dessous, on assigne un paramètre du constructeur (theName) à une propriété de la classe (this.name) :

class Person {
  name: string;
  constructor(theName: string) {
    this.name = theName;
  }
}

C’est une tâche tellement fréquente qu’une syntaxe raccourcie a été inventée, appelée “propriété-paramètre” :

class Person {
  constructor(public name: string) {
    // `this.name` est maintenant défini
  }
}

La présence du mot-clé public devant un paramètre de constructeur — name dans l’exemple — transforme automatiquement ce paramètre en une propriété de classe du même nom, soit this.name dans notre cas. Cette syntaxe nous dispense de devoir déclarer la propriété name et ensuite de lui assigner une valeur.

La propriété this.name ainsi créée est publique, mais la technique fonctionne également avec les autres modifieurs d’accessibilité, private et protected. Les propriétés créées ont alors une visibilité private ou protected.

Informations

Tags : es6typescript

Dernière mise à jour :

Auteur : AngularChef

Qualité : Bonne