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

如何仅通过fn获取namespace为a时key的TypeScript泛型约束类型?

如何从泛型函数fn中获取指定namespace对应的key类型?

仅能访问外部库导出的fn函数时,想要获取当namespace为"a"时参数key的类型,之前尝试类似Parameters<fn>['a', infer T]的写法无法生效。外部库的代码如下:

type ParamMap = {
  a: "a1" | "a2";
  b: "b1" | "b2";
};

type Params<T extends keyof ParamMap> = ParamMap[T];

export const fn = <Namespace extends keyof ParamMap, Val extends Params<Namespace>>(
  namespace: Namespace,
  key: Val
): string => `${namespace}.${key}`;

解决方案

可以通过条件类型结合泛型推断来实现,核心是匹配fn在第一个参数为"a"时的函数签名,从而提取第二个参数的类型:

// 写法一:直接通过条件类型推断
type KeyTypeForA = (typeof fn) extends (n: "a", k: infer K) => any ? K : never;

// 写法二:结合Parameters工具类型
type KeyTypeForA2 = Parameters<(typeof fn) extends (n: "a", k: infer K) => any ? typeof fn : never>[1];

两种写法最终都会得到KeyTypeForA的类型为"a1" | "a2",完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:59:51