尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
typeof、keyof 与索引访问类型:TypeScript-New-Handbook 类型提取三剑客
typeof、keyof 与索引访问类型TypeScript-New-Handbook 类型提取三剑客【免费下载链接】TypeScript-New-HandbookIncubation repository for the new TypeScript handbook 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScript-New-HandbookTypeScript 最强大的能力之一就是类型提取——用已经存在的值或类型推导出全新的类型从而减少重复代码、提升维护性。在官方新手册 TypeScript-New-Handbook 中专门用一章《Types from Extraction》系统讲解了三个核心工具typeof、keyof与索引访问类型Indexed Access Types它们被开发者亲切地称为类型提取三剑客。这篇文章面向新手不堆砌复杂概念用最通俗的讲解和少量示例帮你一次搞懂它们各自的作用与搭配技巧。什么是类型提取为什么新手必须掌握简单说类型提取就是用一个类型的形状推导出另一个类型。它和泛型一样都是 TypeScript 类型系统表达类型之间的关系的方式但更贴近日常场景。举个例子你写了一个对象数组想拿到数组里单个元素的类型难道要手动再写一遍完全不用——用三剑客中的typeof 索引访问类型几行代码就能自动搞定而且数据源一变类型自动跟着变永远不会手写错。在 TypeScript-New-Handbook 项目中这一主题的完整讲解位于源文件chapters/Types from Extraction.md渲染后的网页版在docs/chapters/types-from-extraction/index.html建议边读文章边对照原文。三剑客作用一句话适用场景typeof把值变成类型从变量、函数提取类型keyof取出对象的所有键生成键的联合类型索引访问类型精准取出属性的类型从类型中挖出子类型typeof 类型运算符把值变成类型的桥梁 JavaScript 本身就有typeof比如typeof hello会返回字符串string。TypeScript 在此基础上赋予它一个类型上下文中的新使命引用某个变量或属性的类型。let s hello; let n: typeof s; // n 的类型是 string对新手来说最有价值的用法是和内置类型工具ReturnTypeT配合先取函数的类型再自动得到它的返回值类型。注意不能直接写ReturnTypef因为f是值而不是类型必须加上typeof转一下function f() { return { x: 10, y: 3 }; } type P ReturnTypetypeof f; // 自动得到 { x: number; y: number }⚠️ 有一个限制要记住typeof只能作用于标识符变量名或其属性不能写typeof f()这样的调用表达式这是 TypeScript 为了避免看似在执行、其实没有的陷阱而有意设计的。keyof 操作符一键取出对象的所有键 ️keyof接收一个对象类型返回它的所有键组成的字符串或数字字面量联合类型type Point { x: number; y: number }; type P keyof Point; // 等价于 x | y有了P你就能用它约束参数必须传x或y杜绝拼错字符串的隐患。当类型带有索引签名时keyof会返回索引类型本身。特别要注意一个经典坑对{ [k: string]: boolean }取keyof得到的是string | number——因为 JavaScript 的对象键总会强制转成字符串obj[0]和obj[0]其实是同一个键。keyof的最大威力在于和**映射类型Mapped Types**配合实现批量转换字段、生成只读版本等高级操作这部分在手册后续章节还会展开。索引访问类型精准挖出属性的类型 ⛏️如果keyof是取出所有键那么索引访问类型就是按需取某一键的类型写法上像在给类型加下标type Person { age: number; name: string; alive: boolean }; type A Person[age]; // number它的索引位置本身也是类型所以可以玩出很多花样type I1 Person[age | name]; // number | string type I2 Person[keyof Person]; // number | string | boolean type AliveOrName alive | name; type I3 Person[AliveOrName]; // boolean | string如果写错属性名比如Person[alve]TypeScript 会立刻报错帮你把笔误挡在编译之前。最实用的场景之一提取数组元素类型。用number作为索引再配合typeof就能从数组字面量直接得到元素类型const MyArray [ { name: Alice, age: 15 }, { name: Bob, age: 23 }, ]; type T (typeof MyArray)[number]; // 自动得到 { name: string; age: number }以后再也不用为数组里的对象长什么样重复手写类型了。三剑客组合实战从真实数据自动生成类型 把三者串联起来就能实现数据驱动类型的最佳实践先用typeof把常量、函数等值转为类型再用keyof取出键集合最后用索引访问类型精准定位某个属性或整个数组元素的类型。这样写出的代码类型永远与真实数据保持一致改数据源时无需同步修改类型定义尤其适合处理接口返回的配置对象、国际化文案表等场景。总结与学习路径 一句话记住三剑客typeof取值的类型keyof取对象的键索引访问取属性的类型。三者独立使用很简单组合起来却能量巨大是进阶 TypeScript 类型体操的必经之路。想深入学习的读者推荐按以下路径阅读 TypeScript-New-Handbook 项目本章完整源码chapters/Types from Extraction.md网页版文档docs/chapters/types-from-extraction/index.html关联章节chapters/Narrowing.mdtypeof类型守卫的运行时用法基础铺垫chapters/Everyday Types.md常见类型与typeof的关系把这三个工具练熟你会发现 TypeScript 的类型系统远比想象中更聪明、更好用。【免费下载链接】TypeScript-New-HandbookIncubation repository for the new TypeScript handbook 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScript-New-Handbook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

免费GTA修复工具完整使用指南:让GTA三部曲告别崩溃与闪退

免费GTA修复工具完整使用指南:让GTA三部曲告别崩溃与闪退

免费GTA修复工具完整使用指南:让GTA三部曲告别崩溃与闪退 【免费下载链接】SilentPatch SilentPatch for GTA III, Vice City, and San Andreas 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatch 想象一下:你刚点开《圣安地列斯》&#…

📅 2026/10/6 12:58:02
基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程

基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程

基础设施即代码:erlcloud CloudFormation 部署 AWS 资源的实战教程 【免费下载链接】erlcloud AWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc) 项目地址: https://gitcode.com/gh_mirrors/er/erlcloud 还在为手工点击 AWS 控制台创建…

📅 2026/10/11 4:31:14
手动盯盘太累?用Qbot三步搭建属于你的本地AI量化交易机器人

手动盯盘太累?用Qbot三步搭建属于你的本地AI量化交易机器人

手动盯盘太累?用Qbot三步搭建属于你的本地AI量化交易机器人 【免费下载链接】Qbot [🔥updating ...] AI 自动量化交易机器人(完全本地部署) AI-powered Quantitative Investment Research Platform. 📃 online docs: https://ufund-me.github…

📅 2026/10/29 6:04:56
MORE NEWS

更多资讯

📰

Springboot 常用注解(苍穹外卖)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

spring中事务失败的几种场景【经典】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Arraylist与顺序表

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

【芳芯科技】16x64 LED点阵屏显示温湿度报警

实物效果图:实现功能: 1.DHT11温度度传感器实时采集温度和湿度的数值,通过1664 LED电子屏显示出来。 2.当温度超过25摄氏度或者湿度超过80%,1664 LED电子屏开始循环显示先关提示内容。原理图:程序源码:资料…

📰

【芳芯科技】机智云行人检测节能路灯

实物效果图:实现功能:1.红外热释电检测行人2.检测环境光亮度3.有一个可充能的电池和一个小示意灯,检测电池充能状态,正常充能示意灯亮,反之灯灭4.可以通过wifi模块连接手机云平台,云平台可以查看灯运行状态…

📰

wangEditor 5 富文本编辑器质量保障指南:300+ 测试用例与多浏览器兼容实现拆解

wangEditor 5 富文本编辑器质量保障指南:300 测试用例与多浏览器兼容实现拆解 【免费下载链接】wangEditor wangEditor, open-source Web rich text editor 开源 Web 富文本编辑器 项目地址: https://gitcode.com/gh_mirrors/wa/wangEditor wangEditor 是一款…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬