Wenn das type-Prädikat "test is string" im obigen Format verwendet wird (anstatt boolesch für den Rückgabetyp zu verwenden), wird nach dem Aufruf von isString (), wenn die Funktion true zurückgibt, TypeScript den Typ auf string eingrenzen in irgendeinem Block, der durch einen Aufruf der Funktion geschützt wird. Der Compiler wird denken, dass foo eine Zeichenfolge in dem unten geschützten Block ist (und NUR in dem folgenden geschützten Block)
%Vor%Typ-Prädikat wird nur in der Kompilierzeit verwendet. Die Ergebnisdatei .js (Laufzeit) hat keinen Unterschied, da sie den TYP nicht berücksichtigt.
Ich werde die Unterschiede in den folgenden vier Beispielen erläutern.
Zum Beispiel 1: Der obige Beispielcode hat keinen Kompilierfehler und Laufzeitfehler.
Beispiel 2: Der folgende Beispielcode hat einen Kompilierungsfehler (sowie einen Laufzeitfehler), da TypeScript den Typ auf string verengt hat und überprüft hat, dass toExponential nicht zur string-Methode gehört.
%Vor%z. 3: Der folgende Beispielcode hat keinen Kompilierungsfehler, wird aber einen Laufzeitfehler haben, da TypeScript den Typ NUR im geschützten Block NUR auf String beschränkt, daher wird foo.toExponential keinen Kompilierfehler erzeugen (TypeScript glaubt nicht, dass es sich um einen Zeichenkettentyp handelt) ). In Laufzeit verfügt string jedoch nicht über die toExponential-Methode, daher wird ein Laufzeitfehler auftreten.
%Vor%z. 4: Wenn wir "test is string" nicht verwenden (Typ-Prädikat), wird TypeScript den Typ im blockierten Block nicht eingrenzen, und der folgende Beispielcode wird keinen Kompilierungsfehler haben, aber einen Laufzeitfehler haben.
%Vor%Die Schlussfolgerung ist, dass "test is string" (Typprädikat) in der Kompilierzeit verwendet wird, um den Entwicklern mitzuteilen, dass der Code die Möglichkeit haben wird, einen Laufzeitfehler zu haben. Für JavaScript werden die Entwickler den Fehler in der Kompilierungszeit nicht kennen. Dies ist der Vorteil der Verwendung von TypeScript.
Tags und Links typescript