Quand utiliser L'Interface et le modèle dans TypeScript / Angular2

j'ai récemment regardé un tutoriel sur L'angle 2 avec le typographie, mais je ne sais pas quand utiliser une Interface et quand utiliser un modèle pour tenir les structures de données.

exemple d'interface:

export interface IProduct {
    ProductNumber: number;
    ProductName: string;
    ProductDescription: string;
}

exemple de modèle:

export class Product {
    constructor(
        public ProductNumber: number,
        public ProductName: string,
        public ProductDescription: string
    ){}
}

je veux charger des données JSON à partir d'une URL et me lier à L'Interface/modèle. Parfois je veux un seul objet de données, d'autres fois je veux tenir et tableau de l'objet.

Qui dois-je utiliser et pourquoi?

124
demandé sur developer033 2016-06-06 11:30:13

4 réponses

Les Interfaces

ne sont disponibles qu'au moment de la compilation. Cela vous permet seulement de vérifier que les données attendues reçu suit une structure particulière. Pour cela, vous pouvez lancer votre contenu vers cette interface:

this.http.get('...')
    .map(res => <Product[]>res.json());

voir ces questions:

vous pouvez faire quelque chose de similaire avec class mais les principales différences avec class sont qu'ils sont présents à l'exécution (fonction constructeur) et vous pouvez définir des méthodes dans eux avec le traitement. Mais, dans ce cas, vous devez instancier des objets pour pouvoir les utiliser:

this.http.get('...')
    .map(res => {
      var data = res.json();
      return data.map(d => {
        return new Product(d.productNumber,
          d.productName, d.productDescription);
      });
    });
87
répondu Thierry Templier 2017-05-23 12:02:48

le Interface décrit soit un contrat pour une classe soit un nouveau type . Il s'agit d'un élément purement dactylographié, donc il n'affecte pas Javascript.

un modèle, et à savoir un classe , est une fonction JS réelle qui est utilisé pour générer de nouveaux objets.

je veux charger des données JSON à partir d'une URL et me lier à L'Interface/modèle.

optez pour un modèle, sinon ce sera toujours JSON dans votre Javascript.

29
répondu pietro909 2016-06-06 08:42:29

comme @ThierryTemplier l'a dit pour recevoir des données du serveur et aussi transmettre le modèle entre les composants (pour garder la liste intellisense et faire l'erreur de temps de conception), c'est bien d'utiliser l'interface, mais je pense que pour envoyer des données au serveur (DTOs) il est préférable d'utiliser la classe pour prendre les avantages de la cartographie automatique DTO à partir du modèle.

2
répondu M.Farahmand 2018-05-11 08:36:14

utiliser la classe au lieu de L'Interface c'est ce que j'ai découvert après toutes mes recherches.

pourquoi? Une classe seule est moins codée qu'une classe plus interface. (de toute façon, vous pouvez avoir besoin d'une classe pour le modèle de données)

pourquoi? Une classe peut agir comme une interface (utiliser des outils au lieu d'étendre).

pourquoi? Une classe d'interface peut être un jeton de recherche de fournisseur dans l'injection de dépendance angulaire.

Angulaires Guide de Style

fondamentalement une classe peut tout faire, ce qu'une Interface fera. donc peut ne jamais avoir besoin d'utiliser une Interface .

-3
répondu Sajith Mantharath 2018-03-12 09:33:36