为何指定为string类型的变量,实际typeof检测结果却是number?
TypeScript类型标注与运行时类型不符的原因
先看你提供的代码:
let vAny: any = 10 let s1: string = vAny; console.log(typeof s1)
核心原因
TypeScript的类型标注是编译时检查机制,只在代码编译阶段帮你校验类型是否合规,不会修改运行时变量的实际值和类型。
- 你用
any类型的vAny赋值给标注为string的s1时,any类型会完全绕过TypeScript的编译类型校验——TypeScript默认你清楚自己在做什么,所以不会阻止这个赋值操作。 - 但运行时执行的是编译后的JavaScript代码,
s1实际存储的还是数字10,所以typeof s1会输出number。
解决方法
如果要让运行时类型也符合string的标注,需要显式转换值的类型:
let vAny: any = 10 let s1: string = String(vAny); // 显式将数字转为字符串 console.log(typeof s1) // 输出 "string"
内容的提问来源于stack exchange,提问作者Kingshuk Saha
相关产品推荐
相关产品推荐

