Typoskript instanceof funktioniert nicht

Habe ich Probleme mit dem instanceof-operator und es scheint nicht zu funktionieren. Hier ist ein Teil von meinem code:

        const results = _.map(items, function(item: Goal|Note|Task, index: number) { 
            let result = {};
            if (item instanceof Goal) {
                result = { id: index, title: item.name };
            } else if (item instanceof Note) {
                result = { id: index, title: item.content.text };
            } else if (item instanceof Task) {
                result = { id: index, title: item.name };
            }

            console.log(item);
            console.log(item instanceof Goal);
            console.log(item instanceof Note);
            console.log(item instanceof Task);

            return result; 
        });

Alle meine logs sagen falsch, hier ist das, was die Konsole sieht wie folgt aus:

Typoskript instanceof funktioniert nicht

Keiner von Ihnen übereinstimmen, obwohl Sie ausdrücklich darauf hin, dass nur die 3 Arten wäre möglich. Sie konnte auch sehen, dass das Objekt sich mit einer typename Ziel, so verstehe ich nicht, warum es nicht mit mit instanceof Ziel.

Irgendwelche Ideen?

  • Wie sind Sie zu generieren items? Entstehen Sie durch Konstruktoren? Wenn nicht, werden Sie nicht werden, die Instanzen einer bestimmten Klasse.
  • Hast du das Objekt kopieren vielleicht? Durch JSON.analysieren oder Objekt.zuweisen?
  • Sie sind Antworten, die von einer API/http-Aufruf. Müssen, warum Ihre typeofs sind immer Objekte im Gegensatz zu bestimmten Typen?
  • Recht. Für instanceof zu arbeiten, müssen Sie eigentliche machen von Konstruktoren. Sonst sind Sie nur Objekte, die zufällig die gleiche Form wie Ihre gewünschten Objekte.
  • Danke @MikeC, entschied sich für die Verwendung hasOwnProperty statt.
  • oder nutzen Sie einfach typeguards. 🙂
  • Ich denke nicht, dass eine der Lösungen auf StackOverflow eine umfassende Lösung für das problem. So, ich habe ein npm-Paket angular-http-deserializer für diese: npmjs.com/package/angular-http-deserializer#usage

InformationsquelleAutor AnimaSola | 2017-08-30
Schreibe einen Kommentar