keyof 与索引访问类型
使用 keyof 和 T[K] 动态访问对象属性类型
keyof 与索引访问类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。
欢迎
keyof 会生成对象类型属性名称的联合类型。索引访问类型(T[K])可以获取特定属性键对应的类型。
keyof 基础知识
keyof T 会返回 T 的所有属性名称类型组成的联合类型。
interface User { id: number; name: string; email: string; }
type UserKeys = keyof User; // 'id' | 'name' | 'email'索引访问:T[K]
使用 T[K] 获取类型 T 中属性 K 的类型。
type IdType = User['id']; // number
type NameType = User['name']; // string动态属性访问
结合 keyof 和泛型,可以构建类型安全的属性访问函数。
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const name = getProperty(user, 'name'); // stringkeyof 与 typeof
对一个值使用 typeof,再使用 keyof 获取其属性名称,而无需声明接口。
const config = { host: 'localhost', port: 3000 };
type ConfigKey = keyof typeof config; // 'host' | 'port'索引类型的联合
使用联合键索引一个类型,可以获得这些键对应值类型的联合类型。
type NumericValues = User['id' | 'age']; // number | number = number数组上的 keyof
对数组类型使用 keyof 会返回数组索引类型以及数组方法名称。
type ArrKey = keyof string[]; // number | 'length' | 'push' | ...
type Element = string[][number]; // string递归索引访问
通过链式索引访问类型访问嵌套对象。
type Address = { city: string; zip: string };
type Profile = { address: Address };
type City = Profile['address']['city']; // string使用 keyof 进行约束
将 K extends keyof T 用作泛型约束,以确保 K 是 T 的有效键。
function setProperty<T, K extends keyof T>(obj: T, key: K, value: T[K]): void {
obj[key] = value;
}映射类型使用 keyof
映射类型会遍历 keyof T,以转换对象类型。
type Readonly2<T> = { readonly [K in keyof T]: T[K] };条件类型中的 keyof
keyof 在条件类型中功能强大,可用于提取特定的键集合。
type StringKeys<T> = { [K in keyof T]: T[K] extends string ? K : never }[keyof T];快速检查
如果 `interface User { name: string }`,那么 `User['name']` 会返回什么?
回顾
keyof 会将属性名称提取为联合类型。T[K] 会获取某个键对应的类型。二者结合后,可以实现类型安全的属性访问、映射类型和条件类型工具。
常见问题解答
「keyof 与索引访问类型」课时是免费的吗?
是的 — 「keyof 与索引访问类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。
「keyof 与索引访问类型」这节课中我会学到什么?
使用 keyof 和 T[K] 动态访问对象属性类型 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「keyof 与索引访问类型」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- keyof 与索引访问类型
- 泛型约束:收窄类型参数
- 条件类型:T extends U ? X : Y
- 可分配条件类型