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

如何在TypeScript中定义指向返回字符串的对象函数键类型?

解决TypeScript筛选对象中返回字符串的函数键名问题

实现代码

const map ={
  a:1,
  b:'Hello world',
  c:()=>99,
  d:()=>'Love',
  e:()=>'adoration'
}

// 筛选map中返回字符串类型的函数对应的键名
type LoveFunctionNameInString = keyof {
  [K in keyof typeof map]: typeof map[K] extends () => string ? K : never
}

// 合法赋值,TypeScript会提示'd'或'e'
const result: LoveFunctionNameInString = 'd';
const result2: LoveFunctionNameInString = 'e';

// 以下代码会触发TypeScript类型错误,符合预期
// const result3: LoveFunctionNameInString = 'a';
// const result3: LoveFunctionNameInString = 'c';

代码说明

  • 通过映射类型遍历typeof map的所有键名K,逐个检查对应值的类型。
  • 借助条件类型判断:如果键K对应的值是返回字符串的函数(即typeof map[K] extends () => string成立),则保留键名K;否则返回never类型(never会在后续的keyof操作中被自动排除)。
  • 最后对筛选后的映射类型取keyof,就得到了仅包含'd'和'e'的联合类型,赋值时只能选择这两个值,其他值会触发类型报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:20:23