Ich habe eine Schnittstelle Base
, welche Schnittstellen und A
B
erstrecken und A
B
und beide haben Eigenschaften, die einzigartig sind und existieren nicht in dem anderes. In meinem Code, habe ich einige Daten, die abhängig von der Art verändern wird:Variablentyp angeben, nach anfänglicher Zuordnung in Maschinenschrift
interface Base {
basicProperty: any,
basicProperty2: any
}
interface A extends Base {
aSpecificProperty: any
}
interface B extends Base {
bSpecificProperty: any
}
function(type): A | B {
const data: A | B = {
basicProperty: 1,
basicProperty2: 2
}
if (type === 'A') {
// Data should be type A
data.aSpecificProperty = 3;
} else if (type === 'B') {
// Data should be type B
data.bSpecificProperty = 3;
}
return data;
}
Gibt es eine Möglichkeit, dies zu erreichen, ohne Typoskript über die Art beschwert nicht die richtigen Eigenschaften enthalten? Oder gibt es eine Möglichkeit, den Typ data
von bis A
oder B
neu zuzuweisen?
aussehen würde ich die Frage aktualisierte es ein wenig präziser über meinen Anwendungsfall zu machen. – josh
Ok, ich habe es verstanden. Lassen Sie mich fragen, wie Sie das 'data' Objekt im' if' con Block erstellen, wie ich es vorgeschlagen habe, ist es eine Option für Sie? Andernfalls müssen Sie die 'data' als 'Base'-Schnittstelle deklarieren (' data: Base') und Sie müssen 'cast'-Operation verwenden, um den Typ innerhalb der' if'-Bedingung zu ändern. – Diullei
Ich habe die Daten im obigen Beispiel vereinfacht, aber die Daten sind ein großes Objekt ... also wäre es eine Menge Duplizierung, wenn ich die Daten in jedem kopiere. Ich habe tatsächlich herausgefunden, was zu tun ist, indem ich auf deinen Vorschlag zum 'cast' schaue (ich erstelle die" Basisdaten "ohne Typ, dann erzeuge vars für A und B mit ihren jeweiligen Typen) und ordne sie in den if-Blöcken zu. Ist das sinnvoll? – josh