2017-06-07 6 views
0

konnte keine richtige Erklärung finden, warum Typprüfung nicht mit JSON.parse() funktioniert, kann jemand etwas Licht darauf werfen? Beispiel:Typprüfung funktioniert nicht mit JSON.parse()?

> let n: number = 1 
undefined 
> typeof n 
'number' 
> n = true 
⨯ Unable to compile TypeScript: [eval].ts (1,1): Type 'true' is not assignable to type 'number'. (2322) 
> typeof JSON.parse(JSON.stringify(true)) 
'boolean' 
> n = JSON.parse(JSON.stringify(true)) 
true 
> typeof n 
'boolean' 

Vielen Dank!

Antwort

3

Denn wenn Sie die Typdefinition für JSON.parse sehen, es gibt any:

parse(text: string, reviver?: (key: any, value: any) => any): any; 

Welche diese Art Prüfungseinrichtung wird auf dem analysierten Ausgang deaktiviert werden. Sie können mehr über die any type in the official documentation.

+0

Das ist, was ich dachte ... Aber dann, warum ist der Typ des Wertes "boolean"? > typeof JSON.parse (JSON.stringify (true)) 'boolean' – saza

+0

Weil das der Laufzeittyp ist. TypeScript kann das zur Kompilierzeit nicht wissen. – Saravana

+0

Vielleicht ist es diese Unterscheidung zwischen der Überprüfung der Kompilierzeit und der Laufzeitprüfung, die dies verwirrend macht. Also wird Typescript während der Laufzeit überhaupt keine Typen prüfen? – saza