web-dev-qa-db-fra.com

Lorsque vous utilisez une interface ou une classe dans Typescript

J'ai un scénario simple d'une connexion qui nécessite que l'utilisateur saisisse un email et un mot de passe dans TypeScript. J'ai besoin de créer un type pour obtenir ce type fort et l'envoyer au back-end.

Cela devrait-il être écrit comme:

export interface UserLogin {
  email: string;
  password: string;
}
//OR
export class UserLogin {
  email: string;
  password: string;
}

Et comment savoir quand le scénario est utilisé?

22
Josbel Luna

À la base, une classe est essentiellement une fabrique d’objets (c’est-à-dire un modèle de ce à quoi un objet est censé ressembler like et ensuite mis en œuvre), alors qu’un interface est une structure utilisée uniquement pour la vérification de type .

Alors qu'une classe peut avoir des propriétés et des méthodes initialisées pour aider à créer des objets, une interface définit essentiellement les propriétés et le type qu'un objet peut avoir.

Dans le scénario que vous avez décrit, on utiliserait le interface pour définir le type pour UserLogin.

23
alephnerd

Si vous avez juste besoin de déclarer un type personnalisé, utilisez des interfaces. OMI, il y a une raison très pragmatique - ils ne sont pas transpilés en JavaScript, donc le code généré est plus court.

Les interfaces ne fonctionneront pas si vous devez instancier des objets avec des constructeurs ou utiliser un framework qui les instancie et les injecte. Ensuite, utilisez des classes ou des classes abstraites.

11
Yakov Fain

En fait, les deux feront le travail. Je vous conseillerais toutefois d’utiliser des interfaces si vous ne faites que la vérification de type car elle est spécialement conçue à cet effet.

Les classes et les interfaces sont des structures puissantes qui facilitent non seulement la programmation orientée objet, mais également la vérification de type dans TypeScript. Une classe est un plan directeur à partir duquel nous pouvons créer des objets partageant la même configuration - propriétés et méthodes. Une interface est un groupe de propriétés et de méthodes associées qui décrivent un objet, mais ne fournit ni leur implémentation ni leur initialisation.

De: https://toddmotto.com/classes-vs-interfaces-in-TypeScript

5
D. Phi

l'envoyer au back-end

L'envoi de classes sur le réseau nécessite un effort supplémentaire - si vous utilisez un type de contenu JSON, votre classe apparaîtra comme un objet brut dans votre code de back-end. Voir nombreuses réponses pour cette question expliquant comment reconvertir JSON en un objet de classe afin qu'il soit possible d'appeler ses méthodes.

Mais comme la classe de votre question n'a pas de méthode, cela n'a pas d'importance, sauf si le code back-end effectuera des contrôles à l'exécution à l'aide de instanceof.

Pour éviter ces problèmes, utilisez une interface comportant uniquement des membres de données permettant de représenter des objets pour la communication avec le back-end.

3
artem