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

如何设计泛型fetch函数,根据传入键动态返回Pick类型?

问题解决:动态字段API请求的泛型函数优化

问题根源

你当前的泛型函数给Keys设置了默认值keyof ResponseT,导致仅显式指定ResponseT时,TypeScript会直接使用这个默认值,不会从传入的keys数组参数中推断实际的键类型,最终返回完整的ResponseT类型而非预期的字段子集。

优化后的函数声明

去掉Keys的默认值,保留Keys extends keyof ResponseT的约束以确保传入的键都是ResponseT中存在的,让TypeScript自动从keys参数推断键类型:

interface ResponseT {
  id: number;
  title: string;
  description: string;
}

declare function fetch<ResponseT extends object, Keys extends keyof ResponseT>(
  keys: Keys[]
): Pick<ResponseT, Keys>;

效果验证

调用时仅指定ResponseT,TypeScript会自动推断出Keys为传入的键集合,返回正确的子集类型:

const result = fetch<ResponseT>(["id", "title"]);
//    ^? { id: number; title: string }

补充说明

该写法在现代TypeScript版本中均可正常工作,既保证了类型安全(仅允许传入ResponseT中存在的键),又实现了无需手动指定Keys的自动推断,完全符合你的期望用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:58:14