Ich versuche, die Unter-Eigenschaft first
zu setzen, die in der Name
-Schnittstelle definiert ist, aber dann bekomme ich immer einen Fehler, zum Beispiel:
Beim Ausführen bekomme ich den Fehler: Cannot set property 'first' of undefined
Hat jemand eine Idee, um das herauszufinden?
Klasseneigenschaften werden bei der Instanziierung nicht automatisch initialisiert. Sie müssen sie manuell mit den entsprechenden Objekten initialisieren - in diesem Fall mit einem Objekt, das die von der Schnittstelle definierten Eigenschaften enthält:
%Vor%Ein anderer Ansatz - beispielsweise für den Fall, dass mehrere Methoden Eigenschaften für dasselbe Objekt festlegen - besteht darin, die Eigenschaft zunächst auf ein leeres Objekt zu initialisieren, vorzugsweise im Konstruktor:
%Vor% Bei der aktuellen Konfiguration führt dies jedoch zu einem Kompilierungsfehler beim Zuweisen von {}
zu this.name
, da die Name
Schnittstelle das Vorhandensein eines first
und eines% co_de erfordert % Eigenschaft für das Objekt Um diesen Fehler zu beheben, könnte man auf optionale Eigenschaften auf einer Schnittstelle zurückgreifen:
Sie müssen name für ein Objekt vom Typ Name festlegen (d. h. eine Form, die dieser Schnittstelle entspricht).
Zum Beispiel:
%Vor% Wenn Sie die Freiheit haben wollen, Änderungen vorzunehmen, können Sie mit ?
,
Im obigen Fall, wenn Sie nicht ?
verwenden, erhalten Sie etwas wie in setNameSample
zum Beispiel, wenn Sie nur first
setzen müssen:
Geben Sie '{first: any; } 'kann nicht dem Typ' Name 'zugewiesen werden. Eigentum 'last' fehlt in
Hinweis: Ich denke, die vorherige Antwort ist der Weg zu gehen, das ist nur ein hinzugefügt.
Tags und Links typescript interface