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

