0Pricing
TypeScript Academy · 课时

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'); // string

keyof 与 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. keyof 与索引访问类型
  2. 泛型约束:收窄类型参数
  3. 条件类型:T extends U ? X : Y
  4. 可分配条件类型
← 返回 TypeScript Academy