← [ BACK_TO_NOTES ]

TypeScript 泛型、keyof 与索引访问

解释泛型如何保留输入输出关系,以及 keyof、约束和索引访问如何安全表达属性操作。

#concept #evergreen #dev #typescript

[!info] related notes

TypeScript 泛型、keyof 与索引访问

一句话定义

泛型用类型参数表达多个位置之间的关系;keyof 取得对象键的联合,T[K] 取得某个键对应的值类型。

function getProperty<T, K extends keyof T>(object: T, key: K): T[K] {
  return object[key];
}

这里的重点不是“支持任意类型”,而是保留关系:传入哪个键,返回值就得到对应属性的类型。

泛型约束

function idOf<T extends { id: string }>(value: T): string {
  return value.id;
}

extends 在这里表示类型参数必须具备最低能力。约束应只要求实现真正需要的字段。

默认类型参数

interface Envelope<TPayload extends Record<string, unknown> = Record<string, never>> {
  payload: TPayload;
}

默认参数让常见调用更简洁;约束保证实现内部可以依赖对象形状。

常见误区

  • 一个只出现一次的类型参数没有建立关系,往往不需要泛型。
  • T extends object 只排除原始值,不等于“任意 JSON 对象”。
  • keyof 得到的是键类型,不是运行时键数组。
  • 复杂泛型不能替代清晰的业务模型;先写具体类型,再抽取重复关系。
创建于 2026/7/29 更新于 2026/9/16
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本