2016-05-17 1 views
0

Ich habe ein Modul mit einer Schnittstelle für ein Mungo-Schema, das wie folgt aussieht:Lassen Sie sich rechts ein, wenn Mongoose Modelle in Typoskript nisten Schnittstellen

// Interface 
export interface User extends PassportDocument 
{ 
    person: ObjectId | Person 
} 

// Mongoose Schema 
var schema = new PassportSchema({ 
    person: { type: ObjectId, required: false, ref: 'Person' } 
}; 

Mein Problem ist, dass, wenn ich bevölkern person auf einem User Dokument I verstehe nicht, wie man das Tippen richtig macht.

.then((user: User) => { 
    console.log(user.person._id); // Property '_id' does not exist on type 'ObjectId | Person' 
} 

Wie löse ich dies, damit ich immer noch Typen verwenden kann, ohne eine neue Schnittstelle zu erstellen?

Antwort

1

Sie user defined type guards. wollen

Unter der Annahme, dass die Person Schnittstelle derjenige ist die _id Eigenschaft enthält,

function isPerson(potentialPerson:any) : potentialPerson is Person { 
    // person-checking logic. 
} 

.then((user: User) => { 
    if(isPerson(user.person)) { 
     console.log(user.person._id); // should work now, user.person is understood to be of type 'Person' 
    } 
} 
+0

Sie vergessen haben ein ':' nach dem params, es ist weniger als 6 Zeichen so: ‚Ich kann t es bearbeiten. Ansonsten funktioniert es wie ein Leckerbissen also danke! Jetzt muss ich nur herausfinden, warum Gulp mir einen Fehler gibt, obwohl alles funktioniert ... – Oskar

+0

Mein Linter gibt mir keine Warnungen mehr, aber beim Kompilieren bekomme ich 'activities.ts (105,91): Fehler TS2339: Property '_id' existiert nicht beim Typ 'ObjectId | Person ". Alles funktioniert, wie auch in der Anwendung selbst, wenn es ausgeführt wird. Irgendwelche Ideen was ist passiert? – Oskar

+0

@Oskar ah du hast Recht, danke. Ich habe den Code aktualisiert. Wie geht es mit Ihrem zweiten Kommentar weiter, wenn Sie im Codeblock der if-Anweisung darauf zugreifen? Es wird nur bestätigt, dass es sich um einen Personentyp handelt. Der Typ der Variablen außerhalb dieses Bereichs ändert sich nicht. – Paarth

Verwandte Themen