TypeScript中object类型变量赋值后输出不符的疑问
问题解答
核心原因:你误解了TypeScript中object类型的含义
TypeScript里的object类型不是指“无属性的空对象”,它的作用是约束变量的值必须是非原始类型——也就是除了string、number、boolean、symbol、null、undefined之外的所有类型,包括带属性的普通对象、数组、函数、正则等。
编译与运行逻辑
TypeScript是静态类型检查工具,只在编译阶段验证类型是否匹配:你赋值的{name:"Jhon", age:32}属于对象类型,符合object的约束,所以编译能通过。而编译生成的JavaScript代码会完全保留你赋值的实际对象,运行时console.log自然会输出这个带属性的对象,不会因为TypeScript的类型声明就修改对象内容。
如果需要约束为“无属性的空对象”
如果你想让变量只能指向空对象,可以用以下两种类型:
- 使用
{}类型:let person: {} = {name:"Jhon", age:32}; // TypeScript会直接报错,因为对象存在额外属性 - 使用更严格的
Record<string, never>类型:let person: Record<string, never> = {}; // 只能赋值空对象,添加任何属性都会触发类型错误
内容的提问来源于stack exchange,提问作者Süleyman Yalman
相关产品推荐
相关产品推荐

