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

TypeScript 中的 object literal 是什么?与普通 object 有何区别?

Object Literal 的定义及与普通 Object 的差异

你已经理解的基础类型字面量逻辑可以直接套用到对象上,两者核心逻辑完全一致:字面量就是「明确固定结构/值的窄类型」,和宽泛的通用类型对应。

实际定义

object literal 中文译名为对象字面量,分两个层面理解:

  • 值层面:指直接用{ key: value }语法声明的对象值,和new Object()、构造函数生成的对象同属对象值的不同创建方式,比如const obj = { a: 1 }中等号右侧的部分就是对象字面量。
  • 类型层面:指 TypeScript 为字面量形式的对象推导/声明的固定结构类型,这个类型会严格限定对象的属性数量、属性名、属性值类型,比如上面的obj推导出来的类型是{ a: number },而非宽泛的object类型。

和普通 object 类型的核心差异

普通object是通用的宽泛类型,仅限定值的类型为对象,不限制任何属性结构,适用所有对象类型的值;而对象字面量类型是固定结构的窄类型,仅匹配结构完全符合的对象值,两者的区别可以参考"bob"和string的区别。

以下是示例对比:

// 通用object类型
let commonObj: object
commonObj = { x: 1 } // 合法
commonObj = [1, 2] // 合法,数组本质也是对象
commonObj = new Date() // 合法
commonObj = { y: 'test' } // 合法,不限制结构

// 对象字面量类型
let literalObj: { x: number }
literalObj = { x: 1 } // 合法
literalObj = [1, 2] // 报错,结构不匹配
literalObj = { x: 1, y: 'test' } // 直接赋值字面量时触发新鲜度检查,报错多余属性
const temp = { x: 1, y: 'test' }
literalObj = temp // 非字面量直接赋值时不触发新鲜度检查,结构匹配即可通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:09:03