You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中为何{}类型与object类型互相兼容?

为什么{} extends object的结果是true?

首先得纠正你对{}类型的误解:它并不是“除null和undefined外的任意类型”,而是描述一个没有自有可枚举属性的对象类型。虽然JS里所有非null/undefined的值(包括原始类型)都能赋值给{}变量(因为它们都继承了Object的方法,比如toString),但这是值层面的赋值兼容性,和类型系统里的extends子类型判断是两回事。

接下来解释核心问题:

  • TypeScript里的object类型,指的是所有非原始类型(对象、数组、函数这类引用类型)。
  • {}本身就是一种对象类型,它代表“没有自有可枚举属性的对象”,自然属于object类型涵盖的范畴。
  • 当进行{} extends object的类型判断时,TS是基于类型的本质来判定的:{}是对象类型的子集,而object是所有对象类型的超类型,因此这个条件判断的结果为true。

再回头看你的两个例子:

  • First = object extends {} ? true : false:所有object类型的值(比如普通对象、数组)都能赋值给{},所以object是{}的子类型,结果为true。
  • Second = {} extends object ? true : false:{}本身是对象类型的一种,属于object的覆盖范围,因此结果也为true。

内容的提问来源于stack exchange,提问作者Sanitysign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:32:37