Ich habe diesen Code geschrieben
%Vor%Aber TypeScript gab mir diesen Fehler:
%Vor% Warum passiert das? Ich dachte, dass instanceof
prüfen könnte, ob mein Wert einen bestimmten Typ hat, aber TypeScript scheint das nicht zu mögen.
Das Problem ist, dass instanceof
ein Konstrukt von ist JavaScript und in JavaScript erwartet instanceof
einen Wert für den rechten Operanden.
Insbesondere wird in x instanceof Foo
JavaScript eine Laufzeitprüfung durchführen, um festzustellen, ob Foo.prototype
irgendwo in der Prototypkette von x
existiert.
In TypeScript hat interface
s jedoch keine Ausgabe.
Das bedeutet, dass Foo.prototype
zur Laufzeit nicht existiert, daher wird dieser Code definitiv fehlschlagen.
TypeScript versucht Ihnen dort eine Warnung zu geben: Foo
ist nur ein Typ; Es ist überhaupt kein Wert!
instanceof
?" Sie können Wächter und benutzerdefinierten Typ eingeben Wachen .
interface
zu einem class
gewechselt habe?" Sie könnten versucht sein, von einem interface
zu einem class
zu wechseln, aber Sie sollten wissen, dass Sie in TypeScripts Strukturtypsystem (wo Dinge hauptsächlich shape-basiert sind ) beliebige erzeugen können ein Objekt, das die gleiche Form wie eine bestimmte Klasse hat:
In diesem Fall haben Sie x
und y
, die denselben Typ haben, aber wenn Sie instanceof
für beide verwenden, erhalten Sie das gegenteilige Ergebnis auf der anderen Seite.
So wird instanceof
Ihnen nicht viel über den Typ sagen, wenn Sie die Strukturtypen in TypeScript nutzen.
Tags und Links javascript instanceof typescript