如何用Pick工具类型选取无命名键嵌套对象的指定属性?
解决方案:提取嵌套索引签名对象的指定属性
你之前的写法问题在于:Pick工具类型只能直接作用于单个对象类型,无法识别路径字符串(比如'streaming[key].title'),也不能直接对索引签名的外层对象使用keyof来提取内层属性。
要实现需求,需要分两步处理:
- 先提取
streaming内部每个键对应的值类型 - 对该值类型使用
Pick筛选目标属性,再重组回原嵌套结构
最终可行代码
type SomeData = { streaming: { [key: string]: { id: number; title: string; live: string; // 其他属性 }; }; }; // 先获取streaming内部值的类型 type StreamingItem = SomeData['streaming'][string]; // 提取指定属性并重组为目标类型 type MyType = { streaming: { [key: string]: Pick<StreamingItem, 'title' | 'live'>; }; };
简化内联写法
如果不需要单独定义StreamingItem,可以直接合并步骤:
type MyType = { streaming: { [key: string]: Pick<SomeData['streaming'][string], 'title' | 'live'>; }; };
最终类型效果
MyType的结构会是:
{ streaming: { [key: string]: { title: string; live: string; }; }; }
完全符合你只保留title和live属性的需求。
内容的提问来源于stack exchange,提问作者Yusuf
相关产品推荐
相关产品推荐

