Ich habe eine Schnittstelle in meiner Anwendung:
%Vor%das ist Teil einer Post-Schnittstelle:
%Vor%Ich habe auch eine Schnittstelle, die für einen Post-Entwurf ist, wo das Asset-Objekt möglicherweise nur teilweise konstruiert ist
%Vor% Ich möchte einem PostDraft
-Objekt erlauben, ein partielles Asset-Objekt zu haben, während ich noch Typen auf den Eigenschaften überprüfe, die dort sind (also möchte ich es nicht einfach mit any
austauschen).
Ich möchte grundsätzlich einen Weg finden, Folgendes zu generieren:
%Vor% ohne die Schnittstelle Asset
vollständig neu zu definieren. Gibt es eine Möglichkeit, dies zu tun? Wenn nicht, was wäre der schlaue Weg, meine Typen in dieser Situation zu arrangieren?
Dies ist in TypeScript & lt; nicht möglich. 2.1 ohne eine zusätzliche Schnittstelle mit optionalen Eigenschaften zu erstellen; Dies ist jedoch möglich, indem Sie in TypScript 2.1 zugeordnete Typen verwenden.
Verwenden Sie dazu die Partial<T>
-Schnittstelle in lib .d.ts :
Nun sind alle Eigenschaften in asset
optional, was Ihnen erlauben würde, dies zu tun:
Die Eigenschaften in der Schnittstelle sind entweder optional nicht, Sie können die gleiche Schnittstelle nicht einmal als optional und einmal wie erforderlich verwenden.
Was Sie tun können, ist eine Schnittstelle mit optionalen Eigenschaften für die AssetDraft
und dann eine Klasse mit obligatorischen Eigenschaften für die Asset
:
Die Standardwerte hier sind statische Member, aber Sie können diese auf andere Arten erhalten oder einen Fehler ausgeben, falls sie fehlen.
Ich finde diesen Weg sehr angenehm, wenn ich mit jsons arbeite, die vom Server empfangen werden (oder etwas Ähnliches), die Schnittstellen repräsentieren die json-Daten und die Klassen sind die tatsächlichen Modelle, die mit den jsons als Anfangswerte konstruiert werden. p>
Wie wäre es, wenn Sie ein leeres Objekt erzwingen möchten, z. B.
?
const draft = <PostDraft>{}
draft.id = 123
draft.internal_id = 456
draft.usage = 789
Wenn Sie dies wirklich brauchen, können Sie immer eine d.ts-Schnittstelle aus einer Vorlage erstellen, die sowohl die optionalen als auch die typisierten Eigenschaften enthält.
Wie Nitzan darauf hingewiesen hat, sind die Eigenschaften der Typoskript-Schnittstelle optional oder nicht
Tags und Links typescript