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

TypeScript实现PickOptional<T,K>泛型解决Pick无效键报错及生成unknown属性问题

PickOptional<T, K> 泛型实现方案

核心实现代码

type PickOptional<T, K extends PropertyKey> = Pick<T, Extract<K, keyof T>>

实现逻辑说明

  • 泛型参数K extends PropertyKey:允许传入任意合法对象键(字符串、数字、Symbol类型),不会因为传入原接口不存在的键直接抛出类型错误
  • Extract<K, keyof T>:从传入的键联合类型中,自动筛选出确实存在于原接口T中的键,直接忽略所有无效键
  • 最后基于原生Pick生成最终的类型,不会产生值为unknown的冗余属性

效果测试

用示例代码验证效果:

interface Sounds {
    'meow': true
    "woof": false
}

// 传入不存在的`cluck`不会触发类型错误
type Sound = PickOptional<Sounds, 'woof' | 'cluck'>

// 最终Sound的实际类型为:
// {
//   woof: false
// }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:24:03