news 2026/7/10 14:00:53

TypeScript 对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript 对象

TypeScript 中的对象详解

在 TypeScript 中,对象是最常见的数据结构之一。TypeScript 通过强大的类型系统来描述对象的形状(shape),确保对象属性存在、类型正确,从而大幅减少运行时错误。

1. 对象字面量与类型推断
letuser={name:"Alice",age:30,isAdmin:true};// 类型推断为:{ name: string; age: number; isAdmin: boolean; }user.name="Bob";// OK// user.age = "30"; // 错误:类型不匹配// user.role = "admin"; // 错误:对象上不存在 role 属性
2. 使用接口(interface)定义对象类型(推荐)
interfaceUser{name:string;age:number;isAdmin?:boolean;// 可选属性readonlyid:number;// 只读属性}letadmin:User={name:"Eve",age:28,id:1// isAdmin 可省略};// admin.id = 2; // 错误:只读属性admin.age=29;// OK
3. 使用类型别名(type)定义对象类型
typePoint={x:number;y:number;z?:number;// 可选};letorigin:Point={x:0,y:0};// origin.z = undefined; // OK,可选属性可为 undefined
4. 匿名对象类型

直接在变量声明时定义(适合临时使用):

letconfig:{apiUrl:string;timeout:number;readonlydebug:boolean;}={apiUrl:"https://api.example.com",timeout:5000,debug:true};
5. 索引签名(Index Signatures)—— 动态属性

当对象属性名不确定时使用:

interfaceStringMap{[key:string]:string;// 任意 string 键,值必须是 string}letheaders:StringMap={"Content-Type":"application/json","Authorization":"Bearer token123"};headers["X-Custom"]="value";// OK// headers.age = 30; // 错误:值必须是 string

也可以限制键为 number:

interfaceNumberArray{[index:number]:string;// 如数组,但值必须是 string}
6. 额外属性检查(Excess Property Checks)

TypeScript 对对象字面量有严格检查:

interfacePerson{name:string;age:number;}letp:Person={name:"Tom",age:25,role:"admin"// 错误:role 不存在于 Person 接口};// 但通过变量赋值可绕过(结构化类型系统):letextra={name:"Tom",age:25,role:"admin"};letp2:Person=extra;// OK,多余属性被允许
7. 对象展开与合并
letdefaults={timeout:3000,retries:3};letconfig={...defaults,timeout:5000};// timeout 被覆盖// 类型:{ timeout: number; retries: number; }
8. 内置工具类型(Utility Types)操作对象

TypeScript 提供许多实用类型来变换对象类型:

工具类型作用示例
Partial<T>所有属性变为可选Partial<User>→ name?, age?, isAdmin?
Required<T>所有属性变为必选Required<User>
Readonly<T>所有属性变为只读Readonly<User>
Pick<T, K>挑选指定属性`Pick<User, “name”
Omit<T, K>排除指定属性Omit<User, "id">
Record<K, T>创建键为 K、值为 T 的对象类型Record<string, number>

示例:

typeUserUpdate=Partial<User>;// 更新时所有字段可选letupdate:UserUpdate={name:"New Name"};// OK,只改 nametypeUserBasic=Pick<User,"name"|"age">;letbasic:UserBasic={name:"Alice",age:30};
9. 对象 vs Map
场景推荐使用
键为字符串,结构固定对象 + interface
键为任意类型(对象、Symbol)Map<K, V>
需要动态添加属性对象 + 索引签名 或 Map
10. 最佳实践建议
建议说明
始终为对象定义接口或 type提升可读性和安全性
可选属性用?,只读用readonly明确意图
动态对象用索引签名避免 any
使用工具类型改造对象如 Partial 用于更新函数参数
避免 any 类型对象用 unknown 或具体接口替代
开启strict模式包括noImplicitAnystrictNullChecks
小结:对象类型常见写法速查
场景推荐写法
固定结构对象interface User { name: string; age: number; }
可选/只读属性isActive?: boolean; readonly id: number;
动态键对象[key: string]: string;
更新对象Partial<User>
只取部分字段`Pick<User, “name”
排除字段Omit<User, "password">

对象是 TypeScript 中最核心的数据载体,通过接口、工具类型和类型推断的结合,能实现高度类型安全的代码。

如果您想深入某个部分(如嵌套对象对象解构与类型对象合并的高级类型、或实际项目中的对象设计),请告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 10:10:28

并行编程实战——CUDA编程的内核循环展开

一、循环展开 开发经验相对丰富一些的程序员应该对循环展开并不陌生&#xff0c;特别是有过循环优化方面的经历的可能了解的会更深刻一些。循环是对CPU占用比较多的一种情况&#xff0c;如果在每次循环中再有大量的计算情况下&#xff0c;可能效果会更差。此时可以通过一定的方…

作者头像 李华
网站建设 2026/7/10 10:13:13

基于大数据的校园点餐系统设计与实现-计算机毕业设计源码+LW文档

摘 要 随着社会的不断发展&#xff0c;互联网数据时代的到来&#xff0c;数据的背后是什么&#xff0c;数据有什么用&#xff0c;怎么用庞大的数据来呈现出数据的价值&#xff0c;让我们一起去揭开它神秘的面纱。基于大数据的校园点餐系统是一种创新性的餐饮服务模式&#xff…

作者头像 李华
网站建设 2026/7/9 15:03:56

Excalidraw AI改善客户沟通体验

Excalidraw AI&#xff1a;重塑客户沟通的智能可视化实践 在一次跨国售前会议中&#xff0c;客户用带着口音的英语描述着他们的系统需求&#xff1a;“我们想要一个能处理高并发订单的服务……前端要快&#xff0c;后端要稳&#xff0c;中间可能还需要缓存。”团队成员一边点头…

作者头像 李华
网站建设 2026/7/10 11:39:44

【Open-AutoGLM书籍阅读全记录】:揭秘AI时代高效阅读的5大核心技术

第一章&#xff1a;Open-AutoGLM书籍阅读全记录的背景与意义随着大语言模型技术的迅猛发展&#xff0c;如何高效地理解、复现并拓展前沿研究成果成为开发者和研究者面临的核心挑战。Open-AutoGLM 作为开源社区中聚焦自动化阅读与知识提取的代表性项目&#xff0c;旨在通过大模型…

作者头像 李华
网站建设 2026/7/9 15:03:42

为什么顶尖团队都用Open-AutoGLM做自动化?自定义任务模块深度拆解

第一章&#xff1a;为什么顶尖团队选择Open-AutoGLM 在人工智能快速演进的当下&#xff0c;顶尖技术团队对自动化大语言模型&#xff08;LLM&#xff09;开发平台的需求日益增长。Open-AutoGLM 凭借其高度模块化架构与强大的任务自适应能力&#xff0c;成为众多头部研发团队的首…

作者头像 李华
网站建设 2026/7/9 19:47:00

C++ 自定义排序与优先队列运算符重载

写这部分代码引起的一些思考并总结一、 优先队列的底层逻辑 (Worldview)1. 核心矛盾&#xff1a;为什么用 < 却是“大根堆”&#xff1f;std::priority_queue 的行为逻辑与其命名看似矛盾&#xff0c;实则遵循了 STL 的一致性设计。默认属性&#xff1a;priority_queue Max…

作者头像 李华