TypeScript - Angular 2 Klasse mit leeren Werten instanziieren
Wie initialisiert man die Mitglieder als Klasse mit leeren Werten?
Plunkr
Ich instanziiere mit
public members = new MemberClass();aber die Konsole zeigt Mitglieder: {} an, also kann ich die standardmäßigen leeren Werte nicht festlegen
Also versuche ich im Grunde, eine leere Struktur wie folgt zu replizieren:
this.members = [
{
"Name" : "", "Id" : "", "Team" : "",
"Cases" : {
"history" : []
}
}
];
Antwort #1
Verwende Schnittstellen ;) Und das ist eine Möglichkeit, wie du ein Array mit einem leeren Objekt vom Typ Member erstellen kannst, bei dem die Eigenschaften gesetzt sind. Ich kenne den Anwendungsfall nicht, zumindest setze ich die Eigenschaften bei leeren Objekten/Arrays von Modellen nicht, aber hier ist es :)
Also zuerst Ihre Schnittstellen, die sind:
export interface Member {
Id: string;
Name: string;
Cases: Case[];
}
export interface History {
Id: string;
CaseNumber: string;
}
export interface Case {
History: History[];
}
Dann erstellen Sie 3 Funktionen, um die Eigenschaften festzulegen:
export function createMember(Id?:string,Name?:string, Cases?:Case[]): Member {
return {
Id,
Name,
Cases[createCase()]
}
}
export function createCase(History?:History[]): Case {
return {
History[createHistory()]
}
}
export function createHistory(Id?: string,CaseNumber?:string): History {
return {
Id,
CaseNumber
}
}
Und jetzt können Sie in Ihrer Komponente die Funktion createMember aufrufen, die dann die beiden anderen Funktionen aufruft:
members = [createMember()];
PS, laut Ihren Modellen entspricht das Folgende nicht dem Modell des Member-Arrays, deren Name und Aufbau stimmen nicht überein, aber ich habe das Obige basierend auf den von Ihnen bereitgestellten Modellen erstellt.
Antwort #2
Beachte, dass du dort Schnittstellen (Interfaces) und keine Klassen verwendest. In TypeScript, wie auch in JavaScript, ist ein leeres Objekt einfach {}
Also, um das zu tun, wonach Sie suchen, versuchen Sie dies: let history: History={ Id:"", CaseNumber:""};
Wenn Sie versuchen, eine dieser Eigenschaften wegzulassen, erhalten Sie einen Fehler, dass sie erforderlich sind. Wenn Sie möchten, dass Eigenschaften eines Interfaces beim Instanziieren optional sind, aktualisieren Sie Ihr Interface wie folgt: CaseNumber?: string;
Finden Sie mehr im Handbuch.
Um dies weiter zu verdeutlichen: Eine Klasse ist ein konkreter Typ, den Sie instanziieren und so verwenden können, wie Sie es in jeder Sprache tun würden. Wenn Sie einen Konstruktor oder Standardwerte für Ihre Eigenschaften benötigen, sollten Sie export class MyType {} verwenden.
In meiner Erfahrung habe ich jedoch festgestellt, dass Schnittstellen in TypeScript in vielen Fällen nützlicher sind als Klassen. Der Grund dafür ist, dass man zur Entwicklungszeit gegen sie programmieren kann, sie jedoch nicht in den Bundles enthalten sind, wenn man liefert (Hinweis: Dies hängt VÖLLIG von deinem Anwendungsfall ab).
