TypeScript如何在运行时检查原始类型?
问题解答
为什么TypeScript中仍能使用typeof检查原始类型?
你混淆了TypeScript编译时类型系统和JavaScript运行时行为:
- 你代码里的
typeof是JavaScript原生的运行时操作符,不是TypeScript的类型查询语法。TypeScript编译时只会剥离自己的类型注解、接口、类型别名等编译时概念,不会修改或移除JavaScript本身的语法和运行时逻辑。 - 这段代码编译后,所有
typeof语句会原封不动保留在生成的JavaScript文件中,运行时由JS引擎执行,自然能返回对应值的原始类型。
自定义接口与原始类型的处理差异
两者本质不在一个层面:
- 自定义接口/类型别名:完全是TypeScript的编译时产物,仅用于开发阶段的类型校验,编译后会被彻底移除,不会出现在最终的JS代码里,运行时根本不存在这些接口的痕迹。
- 原始类型(string/number/object等):这些是JavaScript本身的运行时类型,
typeof操作符是JS原生支持的功能,和TypeScript的编译时类型系统无关。就算你用TypeScript写代码,最终运行的还是JS,typeof依然按照JS的规则工作。
实际对比示例
比如定义一个自定义接口:
interface User { name: string; age: number; } const user: User = { name: "Alice", age: 25 }; console.log(typeof user); // 编译运行后输出'object'
这里的User接口编译后会被完全删掉,typeof user在运行时还是JS的原生操作,和接口毫无关系。
内容的提问来源于stack exchange,提问作者Danniel Lee
相关产品推荐
相关产品推荐

