Typescript 类型检查不需要';无法使用JSON.parse()?
找不到正确的解释为什么类型检查不适用于JSON.parse(),有人能解释一下吗?例如:Typescript 类型检查不需要';无法使用JSON.parse()?,typescript,typescript2.0,Typescript,Typescript2.0,找不到正确的解释为什么类型检查不适用于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.str
> 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'
谢谢 因为如果看到
JSON.parse的类型定义,它将返回any
:
parse(text: string, reviver?: (key: any, value: any) => any): any;
这意味着将在解析的输出上禁用类型检查。您可以了解有关的更多信息,因为如果看到JSON.parse
的类型定义,它将返回any
:
parse(text: string, reviver?: (key: any, value: any) => any): any;
这意味着将在解析的输出上禁用类型检查。你可以了解更多关于的信息,这正是我所想的。。。但是,为什么值的类型是布尔值
?>typeof JSON.parse(JSON.stringify(true))“boolean”,因为这是运行时类型。TypeScript在编译时不可能知道这一点。也许正是编译时检查和运行时检查之间的这种区别使得这一点令人困惑。那么,Typescript在运行时根本不会检查类型?正确。TypeScript所做的一切都是编译时的。那很好,明白了。这就是我所想的。。。但是,为什么值的类型是布尔值
?>typeof JSON.parse(JSON.stringify(true))“boolean”,因为这是运行时类型。TypeScript在编译时不可能知道这一点。也许正是编译时检查和运行时检查之间的这种区别使得这一点令人困惑。那么,Typescript在运行时根本不会检查类型?正确。TypeScript所做的一切都是编译时的。没关系,明白了。