Ich habe kürzlich ein Tutorial zu Angular 2 mit TypeScript gesehen, bin mir aber nicht sicher, wann ich eine Schnittstelle und wann ich ein Modell zum Speichern von Datenstrukturen verwenden soll.
Beispiel einer Schnittstelle:
export interface IProduct {
ProductNumber: number;
ProductName: string;
ProductDescription: string;
}
Beispiel eines Modells:
export class Product {
constructor(
public ProductNumber: number,
public ProductName: string,
public ProductDescription: string
){}
}
Ich möchte JSON-Daten von einer URL laden und an die Schnittstelle / das Modell binden. Manchmal möchte ich ein einzelnes Datenobjekt, ein anderes Mal möchte ich ein Array des Objekts halten.
Welches soll ich verwenden und warum?
angular
typescript
I_LIKE_FOO
quelle
quelle
Antworten:
Schnittstellen sind nur zur Kompilierungszeit. Auf diese Weise können nur Sie überprüfen, ob die erwarteten empfangenen Daten einer bestimmten Struktur folgen. Dazu können Sie Ihre Inhalte auf diese Oberfläche übertragen:
Siehe diese Fragen:
Sie können mit class etwas Ähnliches tun, aber die Hauptunterschiede mit class bestehen darin, dass sie zur Laufzeit vorhanden sind (Konstruktorfunktion) und Sie können darin Methoden mit der Verarbeitung definieren. In diesem Fall müssen Sie jedoch Objekte instanziieren, um sie verwenden zu können:
quelle
var data = res.json();
ist wirklichvar data: any = res.json();
für den Compiler, so dass wir alle Typprüfungen verlierendata
. Was wäre nützlicher wäre hier so etwas wievar data: ProductDto[] = res.json();
mitProductDto
einer Schnittstelle , die Modelle der Datenstruktur in dem zurück json zu sein.Angular style guide says not to use interfaces.Always use classes.
Siehe angle.io/guide/styleguide#style-03-03Die Schnittstelle beschreibt entweder einen Vertrag für eine Klasse oder einen neuen Typ . Es ist ein reines Typescript-Element, daher wirkt es sich nicht auf Javascript aus.
Ein Modell und nämlich eine Klasse ist eine tatsächliche JS-Funktion, mit der neue Objekte generiert werden.
Entscheide dich für ein Modell, sonst ist es immer noch JSON in deinem Javascript.
quelle
Wie @ThierryTemplier sagte, um Daten vom Server zu empfangen und auch Modelle zwischen Komponenten zu übertragen (um die Intellisense-Liste zu führen und Entwurfszeitfehler zu machen), ist es in Ordnung, die Schnittstelle zu verwenden, aber ich denke, für das Senden von Daten an den Server (DTOs) ist es besser, die Klasse zu verwenden Vorteile der automatischen Zuordnung von DTO vom Modell.
quelle
Verwenden Sie Klasse anstelle von Schnittstelle , was ich nach all meinen Nachforschungen entdeckt habe.
Warum? Eine Klasse allein ist weniger Code als eine Klasse-plus-Schnittstelle. (Auf jeden Fall benötigen Sie möglicherweise eine Klasse für das Datenmodell.)
Warum? Eine Klasse kann als Schnittstelle fungieren (verwenden Sie Implementierungen anstelle von Erweiterungen).
Warum? Eine Schnittstellenklasse kann ein Provider-Lookup-Token in Angular Dependency Injection sein.
von Angular Style Guide
Grundsätzlich kann eine Klasse alles, was eine Schnittstelle kann. Daher muss möglicherweise nie eine Schnittstelle verwendet werden .
quelle