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

TypeScript中如何让动态取对象值的函数返回对应键的类型?

解决方案

完全可以实现这个需求,核心是利用TypeScript的泛型和索引访问类型自动推导返回值的具体类型,无需类型断言或条件判断。

修改后的代码示例

// 先定义各个值对应的类型(示例)
type TypeA = { id: number; name: string };
type TypeB = { flag: boolean; desc: string };
type TypeZZZ = { data: string[] };

// 定义对象,TypeScript会自动推导每个键对应的类型
const obj = {
  typeA: {} as TypeA,
  typeB: {} as TypeB,
  typeZZZ: {} as TypeZZZ
};

// 泛型函数:K约束为obj的键类型,返回值为对应键的属性类型
const destruct = <K extends keyof typeof obj>(key: K): typeof obj[K] => {
  return obj[key];
};

// 调用时自动推断正确类型
const typeA = destruct('typeA'); // 类型为TypeA
const typeB = destruct('typeB'); // 类型为TypeB
const typeZZZ = destruct('typeZZZ'); // 类型为TypeZZZ

原理说明

  1. 泛型参数K:会捕获调用时传入的具体键名(比如'typeA'),TypeScript会自动将K的类型收窄为该具体字符串字面量类型。
  2. 索引访问类型typeof obj[K]:根据K的具体值,从对象obj的类型中取出对应键的属性类型,实现类型的自动匹配。

如果一定要保留你原来定义的keys联合类型,也可以将泛型约束改为K extends keys,但直接从typeof obj推导键类型更简洁,避免重复定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:50:49