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

如何从字符串数组生成对象类型作为TypeScript函数返回类型?

实现根据所选键返回子集对象类型的TypeScript函数

可以实现这个需求,核心是利用TypeScript的泛型约束和内置Pick工具类型,同时确保传入的键数组被识别为具体的字面量类型,具体实现如下:

type MyType = {
  x: number;
  y: string;
  z: number;
};

// 泛型函数:K 约束为 MyType 的键子集,返回对应键的对象类型
const someFunc = <K extends keyof MyType>(select: readonly K[]): Pick<MyType, K> => {
  // 模拟从完整对象中提取目标键的逻辑
  const fullObject: MyType = { x: 1, y: "example", z: 3 };
  return Object.fromEntries(
    select.map(key => [key, fullObject[key]])
  ) as Pick<MyType, K>;
};

// 调用示例:返回类型自动推导为 { x: number; y: string }
const selectedObj = someFunc(['x', 'y']);
// 此时 selectedObj.x 为 number 类型,selectedObj.y 为 string 类型,selectedObj.z 不存在类型提示

关键说明

  • 泛型K extends keyof MyType:让TypeScript精准捕获传入的具体键集合,而非宽泛的keyof MyType类型
  • readonly K[]参数:确保数组元素被推断为具体的键字面量,无需额外添加as const断言(若传入动态生成的数组,需用as const锁定类型,比如const keys = ['x','y'] as const; someFunc(keys))
  • Pick<MyType, K>返回类型:TypeScript内置工具类型,直接从MyType中挑选出K对应的键值对组成新类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:12:44