You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何提取类型内值为指定类型的键生成联合类型

解决方案

该需求完全可以实现,通过 TypeScript 内置的映射类型与条件类型组合即可完成,具体操作如下:

步骤1:确认基础类型

你给出的基础类型定义如下:

type LabelValue = {
  label: string
  value: string
}

type Person = {
  firstName: string
  lastName: string
  age: number
  pets: LabelValue[]
  details: LabelValue[]
}

步骤2:封装通用筛选工具类型

我们可以封装一个泛型工具类型,通用实现「从指定类型中筛选值匹配目标类型的键」的能力:

/**
 * 从类型 T 中筛选出值类型为 U 的所有键,组成联合类型
 */
type PickKeysByType<T, U> = {
  // 遍历T的所有键,值符合U则保留键名,否则返回never
  [K in keyof T]: T[K] extends U ? K : never
}[keyof T] // 取所有属性值的联合,never会被自动过滤

如果需要严格匹配类型(避免条件类型的分布式特性对联合类型产生意外结果),可以调整为用元组包裹判断逻辑:

type PickKeysByType<T, U> = {
  [K in keyof T]: [T[K]] extends [U] ? K : never
}[keyof T]

步骤3:获取目标联合类型

直接调用上面的工具类型即可得到预期结果:

type PersonLabelValueKeys = PickKeysByType<Person, LabelValue[]>
// 等价于 type PersonLabelValueKeys = "pets" | "details"

内容的提问来源于stack exchange,提问作者Stephan Olsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:27:02