object type 对象类型
最后更新:2026-10-22
object type 对象类型
对象类型用"属性名: 类型"的结构描述对象:一次性使用可内联,需要复用就交给 interface 或 type。TS 靠"形状匹配"判断兼容。
| 分组 | 类型组合 |
|---|---|
| 类型 | 类型 |
| 严格模式 | 不需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
const user: { id: number; name: string; tags?: string[] } = {
id: 1,
name: "Ada",
};
⚙️ 参数
| { name: string } | 分号或逗号分隔的属性声明,值类型可为任意类型(含嵌套对象) |
|---|---|
| ?/readonly | 可选与只读修饰符同样适用于内联对象类型 |
返回值:无返回值——对象类型是纯类型层概念,不产生任何运行时代码。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
5 no label
(转译后运行输出;给 point 写一个类型里不存在的 z 字段会触发多余属性检查报错)
💡 要点
ℹ️ 说明 TS 是结构化类型系统:只要形状匹配就兼容,不要求显式继承某个类或接口("鸭子类型")。
💡 提示 结构被两处以上引用时抽成 interface/type:报错信息更短、修改只改一处。
⚠️ 注意 对象字面量赋值会触发"多余属性检查":写了类型里没有的字段直接报错;先赋给变量再传入则绕过检查。
🏷️ 相关类型组合
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 什么是结构化类型(鸭子类型)?
A 类型兼容性只看"有没有需要的属性和类型",不看声明来自哪里。{x: 1, y: 2, z: 3} 可以赋给 {x: number; y: number},多的 z 不妨碍。
Q 内联对象类型和 interface 该用哪个?
A 只用一次且很简单就内联;要复用、扩展或希望 IDE 有名字提示就用 interface/type。
Q 函数参数是对象怎么标注?
A 直接在参数位置写结构:function draw(p: { x: number; y: number }) {}。结构复杂就先定义 interface 再引用。