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

为什么TypeScript中初始化对象数组后仍可推入布尔值?

为什么TypeScript中{}[]数组可以推入非对象类型值?

先看你给出的代码:

const arr: {}[] = [{}];

arr.push(false); // 未触发预期的类型错误

你预期的错误应该是:

Argument of type 'boolean' is not assignable to parameter of type '{}'.

问题原因

TypeScript里的{}类型不是“空对象”类型,它的实际含义是除null和undefined之外的所有值。因为在JavaScript中,boolean、string、number这类基本类型都有对应的包装对象,TypeScript认为这些值可以被当作{}类型的实例处理(比如你可以给false添加属性:(false as any).foo = 'bar'),所以这些类型都兼容{},自然能被推入{}[]类型的数组。

正确实现方式

如果你想定义一个**只能包含空对象(无任何可枚举属性的对象)**的数组,应该使用Record<string, never>[]或{ [key: string]: never }[]:

const arr: Record<string, never>[] = [{}];

arr.push(false); // 此时会触发预期错误:Argument of type 'boolean' is not assignable to parameter of type 'Record<string, never>'.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:15:53