Ich schreibe einige Unit Tests mit Jasmin. Wenn ich benutze:"as string" versus toString()
let arg0 : string = http.put.calls.argsFor(0) as string;
if(arg0.search(...
dann bekomme ich die Fehler arg0.search
keine Funktion ist. Intellisense zeigt, dass arg0 ein Array und nicht wie erwartet eine Zeichenfolge ist. Wenn ich stattdessen verwende:
let arg0 : string = http.put.calls.argsFor(0).toString();
if(arg0.search(...
es funktioniert. Intellisense zeigt, dass die argsFor-Funktionssignatur als Rückgabetyp einen beliebigen Wert hat. Wenn es aufgerufen wird, wird ein Array zurückgegeben.
Warum funktioniert die "as string" -Version nicht und warum bekomme ich keinen Kompilierfehler, wenn arg0 in diesem Fall ein Array anstelle einer Zeichenfolge enthält?
Also, was Sie sagen, ist, dass, wenn ich Typ-Informationen in Typoskript mich angeben, können die Transpiler nicht immer festzustellen, ob es tatsächlich richtig ist, im Gegensatz zu Sprachen wie C#; Java? – pere57
@ pere57 typescript existiert nur zur Kompilierzeit. Also - du kannst es nicht mit IL oder JVM Bytecodes vergleichen, richtig. – zerkms
@zerkms Ich sehe. In TypeScript ist "as" nur eine Typassertion, die dem TypeScript-Compiler hilft, den Code zu analysieren. Es ändert nicht wirklich die Variable, auf die es angewendet wird. Auf der anderen Seite ist das C# "as" ein Operator und führt zur Laufzeit eine Typumwandlung durch. – pere57