Bei Verwendung von typescript könnte eine deklarierte Schnittstelle wie folgt aussehen:
%Vor%Und eine Implementierung mit zusätzlicher Eigenschaft könnte so aussehen:
%Vor%Beispiel (hier enthält die Variable 'reduced' immer noch die Eigenschaft 'newTest'):
%Vor%Frage
Wie können Sie die "reduzierte" Variable allgemein so definieren, dass sie nur die Eigenschaften enthält, die in der Schnittstelle 'MyInterface' deklariert sind?
Warum
Das Problem tritt auf, wenn versucht wird, die 'reduzierte' Variable mit angular.toJson zu verwenden, bevor sie an einen Restdienst gesendet wird - die toJson-Methode transformiert die newTest-Variable, auch wenn sie während der Kompilierung nicht auf die Instanz zugreifbar ist Rest Service akzeptiert nicht den JSON, da er Eigenschaften hat, die nicht dort sein sollten.
In Ihrem Beispiel ist die Eigenschaft newTest nicht über die Variable reduced zugänglich. Das ist das Ziel der Verwendung von Typen. Das Typoskript bringt Typprüfung, aber es manipuliert nicht die Objekteigenschaften.
Möglicherweise ein Duplikat von:
TypeScript- oder JavaScript-Casting
Sie müssen Ihren Wert auf einen anderen Typ "umwandeln".
Einige gute Beispiele sind auch hier: Ссылка
%Vor%hoffe das hat geholfen?
Wie können Sie die "reduzierte" Variable allgemein so gestalten, dass sie nur die Eigenschaften enthält, die in der Schnittstelle 'MyInterface' deklariert sind.
Da TypeScript strukturell ist, bedeutet dies, dass alles, was die relevanten Informationen enthält, Typ-kompatibel und daher zuweisbar ist.
Das heißt, TypeScript 1.6 erhält ein Konzept namens freshness
. Dies erleichtert das Abfangen von Tippfehlern (Anmerkung Frische gilt nur für Objektliterale):
TS 2.1 hat Object Spread and Rest, so dass es jetzt möglich ist:
%Vor%Danach wird reduziert alle Eigenschaften außer "test" enthalten.
Tags und Links javascript angularjs typescript