如何在TypeScript中移除对象的所有属性,仅保留指定的三个属性?
在TypeScript中过滤对象数组,保留指定属性
嘿,这个需求在日常开发里太常见了!我给你分享几种简洁又符合TypeScript类型安全要求的实现方案:
方案一:直接映射提取属性(最直观)
这种方法通过Array.map遍历数组,对每个对象只提取你需要的start_time、latitude和altitude属性。如果某些对象可能没有altitude,还可以选择性添加该属性,避免出现多余的undefined:
// 先定义目标类型,让代码更严谨 type TargetItem = { start_time: string; latitude: number; altitude?: number; // 标记为可选,因为示例里有的对象没有这个属性 }; const filteredList: TargetItem[] = listObject.map(item => { const result: TargetItem = { start_time: item.start_time, latitude: item.latitude }; // 如果原对象有altitude,才添加到结果中 if (item.altitude !== undefined) { result.altitude = item.altitude; } return result; });
方案二:解构赋值+对象展开(更简洁)
利用ES6的解构语法,快速提取需要的属性,剩下的属性直接忽略。同样可以处理可选属性的情况:
type TargetItem = { start_time: string; latitude: number; altitude?: number; }; const filteredList: TargetItem[] = listObject.map(({ start_time, latitude, altitude }) => ({ start_time, latitude, // 只有altitude存在时才添加这个属性 ...(altitude !== undefined && { altitude }) }));
可选:先过滤无效对象
如果担心数组里存在缺少start_time或latitude的对象(这两个应该是必填的吧?),可以先通过Array.filter筛掉这些无效项,再进行映射:
const filteredList: TargetItem[] = listObject .filter(item => { // 确保必填属性存在且类型正确 return typeof item.start_time === 'string' && typeof item.latitude === 'number'; }) .map(({ start_time, latitude, altitude }) => ({ start_time, latitude, ...(altitude !== undefined && { altitude }) }));
这些方案都能完美实现你的需求,而且结合TypeScript的类型定义,能有效避免后续的类型错误。选哪种就看你个人习惯啦~
内容的提问来源于stack exchange,提问作者Siddhant Fulzele
相关产品推荐
相关产品推荐

