So reduzieren Sie JavaScript-Objekte so, dass sie nur Eigenschaften von der Schnittstelle enthalten

8

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.

    
Tomas F 05.08.2015, 10:30
quelle

5 Antworten

1

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.

    
Tsvetomir Nikolov 05.08.2015 21:39
quelle
1

Versuchen Sie, nur Eigenschaften festzulegen / zuzuweisen, die nur auf der Oberfläche aufgeführt sind? Eine solche Funktionalität ist in TypeScript nicht verfügbar, aber es ist sehr einfach, eine Funktion zu schreiben, die das gesuchte Verhalten ausführt.

%Vor%
    
jamesmoey 05.08.2015 23:16
quelle
0

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?

    
Max Bumaye 05.08.2015 11:00
quelle
0
  

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):

%Vor%     
basarat 06.08.2015 01:50
quelle
0

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.

    
Vitaliy Kurokhtin 23.02.2018 19:26
quelle