typescript - Jämför två gränssnitt vid körning
Jag vill kontrollera om två gränssnitt är lika vid körning och sedan köra någon kod. Jag märkte ett bibliotek som heter conditional-type-checks som kan jämföra typer och returnerar en sann eller falsk typ, men jag är osäker på hur jag ska använda det för mitt fall.
Detta är vad jag har hittills type IDialogUnchanged=IsExact<IDialog, IDialogOrig>;
vilket returnerar en sann eller falsk typ
Svar #1
Kort: Du kan inte. Men det finns genvägar/kringgå-lösningar/sätt som kan ge dig liknande resultat, om du kan ändra dina krav.
Lång: Gränssnitt existerar inte vid körning, så det finns inget sätt för dig att extrahera data om dess medlemmar och/eller jämföra dem. Gränssnitt är verktyg för design-tid, för dig, för autokomplettering etc. De försvinner vid körning. Det finns dock några andra alternativ.
- Du kan sända typen information och sedan hämta den vid körning. Jag är inte medveten om något sätt att få full typinformation vid körning (som Java eller C#-reflektion, men kanske finns några verktyg redan). Med detta paket (reflect-metadata) kan du sända konstruktorns parametrars typer och sedan arbeta med dem.
- Om du har objekt som instanser av specifika gränssnitt/klasser, kan du alltid jämföra dem nyckel för nyckel, med hjälp av Object.keys(obj) - det returnerar en array av fältnamn i den givna typen (fungerar inte med gränssnitt, som jag nämner, finns inte vid körning).
- Dessutom kan instanceof-operatorn vara det du behöver. Den returnerar true om ett objekt är en instans av en given klass. Om du kommer att göra kontroll för båda typerna (säg A och B) du vill jämföra (obj instanceof A && obj instanceof B), där B är en subklass till A och obj är av typen B, kommer du att få true som resultat av detta uttryck.
Hoppas att du kan hitta en lösning. Om inte, vänligen ge fler detaljer eller ange namnet på det biblioteket. Hälsningar.