Classes TypeScript : qui peut accéder à chaque membre

Classes TypeScript

Classes TypeScript : modificateurs, readonly, abstract, implements | We.Inc

Champs, constructeurs, propriétés de paramètre, public, protected, private et #private, readonly, abstract et implements. Testez qui peut atteindre chaque membre dans une matrice interactive.

Une classe TypeScript est une classe JavaScript avec des champs typés et des règles d'accès. Les membres public sont accessibles partout, les membres protected dans la classe et ses sous-classes, les membres private uniquement dans la classe. Ces trois vérifications n'existent qu'à la compilation. Un champ #name est aussi privé dans le JavaScript exécuté, et readonly bloque toute écriture après le constructeur.

Mots-clés de classe et leur effet

Choisissez un modificateur et la matrice affiche cinq façons dont le code peut atteindre ce membre, avec le résultat de tsc pour chacune. La ligne avec les crochets est celle qui surprend : les modificateurs de compilation peuvent être contournés avec une clé chaîne, alors qu'un champ # ne le peut pas.

Questions fréquentes

Quelle est la différence entre private et #private ?

private est une vérification TypeScript. Il disparaît de la sortie, et obj["secret"] compile toujours et lit la valeur. Un champ #secret est un champ privé JavaScript : aucune clé chaîne ne l'atteint, et le code hors de la classe ne peut pas le lire à l'exécution.

Que sont les propriétés de paramètre ?

Un raccourci qui déclare et affecte un champ à partir d'un paramètre du constructeur. Écrire constructor(private readonly id: string) {} crée un champ id private readonly sans corps nécessaire. Le préfixe peut être public, protected, private ou readonly.

implements change-t-il les types dans ma classe ?

Non. implements vérifie seulement que la classe terminée correspond à l'interface. Les paramètres de méthode ont toujours besoin de leurs propres annotations ; en omettre une en mode strict produit une erreur any implicite, même si l'interface nomme déjà son type.

Pourquoi TypeScript dit-il qu'une propriété n'a pas d'initialiseur ?

strictPropertyInitialization, que strict active, exige que chaque champ déclaré soit défini dans la déclaration ou le constructeur. Donnez-lui une valeur, rendez-le optionnel, ou ajoutez ! après le nom si autre chose le définit avant son utilisation.

Quand utiliser une classe abstraite plutôt qu'une interface ?

Utilisez une classe abstraite quand les sous-classes doivent partager du vrai code, comme une méthode qui appelle un hook abstrait. Une interface ne contient aucun code et une classe peut en implémenter plusieurs, elle convient donc pour décrire des formes.

Champs, constructeurs et propriétés de paramètre

Confidentialité à la compilation contre confidentialité à l'exécution

Classes et interfaces fonctionnent ensemble

Les modèles de classe en pratique

Propriétés de paramètre et champ #

Le constructeur déclare deux champs dans sa liste de paramètres. Le cache est un champ #, donc rien hors de la classe ne peut le lire ni le vider.

Une base abstraite avec un override

describe est du code partagé ; area est le hook que chaque forme doit fournir. Avec noImplicitOverride activé, le mot-clé override est obligatoire sur area dans Circle.

implements vérifie, il n'infère pas

L'interface garantit que la classe possède send avec la bonne forme, mais le paramètre a toujours besoin de sa propre annotation de type.

Aucune restriction. Omettre le modificateur revient au même.

Dans les méthodes propres à Account

Dans une méthode de Savings

À l'extérieur, avec un point

À l'extérieur, avec une clé chaîne

À l'extérieur, en affectant une nouvelle valeur

Ouvert à la classe et à ses sous-classes. Une clé chaîne passe quand même la vérification, car ce n'est qu'une règle de type.

Dans les méthodes propres à Account

Dans une méthode de Savings

À l'extérieur, avec un point

À l'extérieur, avec une clé chaîne

À l'extérieur, en affectant une nouvelle valeur

Fermé même aux sous-classes, mais seulement pendant la vérification des types. La forme avec crochets compile et la valeur est lisible à l'exécution.

Dans les méthodes propres à Account

Dans une méthode de Savings

À l'extérieur, avec un point

À l'extérieur, avec une clé chaîne

À l'extérieur, en affectant une nouvelle valeur

Un champ privé JavaScript. Aucune clé chaîne ne le désigne, donc chaque accès extérieur échoue, et le moteur impose la même règle à l'exécution.

Dans les méthodes propres à Account

Dans une méthode de Savings

À l'extérieur, avec un point

À l'extérieur, avec une clé chaîne

À l'extérieur, en affectant une nouvelle valeur

Tout le monde peut le lire ; personne ne peut l'affecter après la construction, pas même les méthodes de la classe.

Dans les méthodes propres à Account

Dans une méthode de Savings

À l'extérieur, avec un point

À l'extérieur, avec une clé chaîne

À l'extérieur, en affectant une nouvelle valeur

Matrice d'accès aux membres

Choisir un modificateur

Accès à un membre {v}

Utilisé depuis

Code

Résultat tsc

Compile

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site