如何在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
相关产品推荐
相关产品推荐

