11. keyof 是什么?

张开发
2026/4/13 14:52:39 15 分钟阅读

分享文章

11. keyof 是什么?
回答keyof的面试题重点在于不仅要说明它的基本用法还要展示你如何利用它来实现高度类型安全的通用代码尤其是与泛型结合。以下是为你准备的回答逻辑和简答模板一、 第一层一句话定义直击本质“keyof是 TypeScript 中的索引类型查询操作符Index Type Query Operator。它的作用是获取一个“对象类型”的所有公共属性名并生成这些属性名的“字符串或数字字面量的联合类型”。”二、 第二层三大核心应用场景展现技术深度面试官最想看的是你如何在实际开发中通过keyof规避any。1. 约束泛型最经典用法当你编写一个获取对象属性的函数时keyof能确保你传入的key必须存在于对象中。例子function getPropertyT, K extends keyof T(obj: T, key: K)。这比只写key: string要安全得多因为它能提供精准的补全和编译时报错。2. 结合typeof处理字面量对象如果我们只有值变量没有类型可以通过keyof typeof obj快速提取该对象的键作为类型。3. 映射类型Mapped Types的基石keyof是编写高级工具类型如官方的PartialT,ReadonlyT,PickT的基础。通过循环keyof T我们可以批量处理属性。三、 第三层进阶理解面试加分点索引特征如果一个类具有索引签名Index Signature例如[key: string]: any那么keyof会返回string | number因为 JS 中数字索引会被转为字符串。与索引访问类型Indexed Access Types配合T[keyof T]可以获取一个对象中所有属性值的联合类型。这是一个非常强大的组合技。四、 类型级 vs 值级大厂常考对比“一个常见的误区是混淆keyof和Object.keys()。keyof是类型空间的操作在编译后消失Object.keys()是值空间的操作在运行时执行。我们无法直接在运行时使用keyof获取的联合类型进行循环除非配合类型断言。”五、 面试简答模板建议直接背诵面试官请谈谈你对 TypeScript 中keyof的理解回答模板“keyof是 TS 的索引类型查询操作符。它能将一个对象的‘属性名’提取出来形成一个字符串或数字的联合类型。我平时在工程中主要在三个地方用到它增强函数的类型安全配合泛型约束确保函数参数必须是某个对象的合法键名。比如实现一个通用的getProp函数利用K extends keyof T我们可以让返回值的类型精准关联到T[K]从而彻底告别any。提取动态对象的键当我面对一个复杂的常量配置文件时我会用keyof typeof config来自动生成对应的类型避免手动维护两份代码。构建工具类型它是映射类型Mapped Types的灵魂。像Partial这种改变对象所有属性可选性的底层实现就是通过in keyof语法去遍历属性名的。总之keyof让我能以**‘以类型推导类型’** 的方式编写出既灵活又极其健壮的代码是 TS 进阶开发的必经之路。”回答思路获取对象类型的 key返回联合类型简答模板keyof用来获取一个对象类型的所有键并组成联合类型。比如keyof User可能得到id | name。它常用于泛型约束和工具类型实现。 代码演示如果面试官要求笔试或详述interface User { id: number; name: string; } // 1. 基本效果 type UserKeys keyof User; // id | name // 2. 泛型约束精彩示例 function getValueT, K extends keyof T(obj: T, key: K): T[K] { return obj[key]; } const user: User { id: 1, name: XSimple }; getValue(user, name); // 自动推导返回值为 string // getValue(user, age); // 编译报错Argument of type age is not assignable...

更多文章