如何使用Interface从对象数组中提取指定属性
使用TypeScript Interface实现指定属性提取
1. 定义数据结构的Interface
先用Interface明确原始数据和目标数据的结构,确保类型安全:
// 学校子结构(原始和目标结构一致,可复用) interface School { name: string; } // 原始学生数据的完整结构 interface OriginalStudent { id: number; name: string; age: number; skl: School; } // 提取后需要的学生数据结构 interface ExtractedStudent { id: number; name: string; skl: School; }
2. 编写转换逻辑
利用数组的map方法遍历原始数组,只保留需要的属性:
// 示例原始数据 const originalStudents: OriginalStudent[] = [ { "id": 1, "name":"name1", age: 11, "skl": {"name": "KK school"} }, { "id": 2, "name":"name2", age: 12, "skl": {"name": "KK school"} }, { "id": 3, "name":"name3", age: 13, "skl": {"name": "KK school"} }, { "id": 4, "name":"name4", age: 14, "skl": {"name": "KK school"} } ]; // 转换函数:从原始数组提取指定属性 const extractTargetProperties = (students: OriginalStudent[]): ExtractedStudent[] => { return students.map(student => ({ id: student.id, name: student.name, // 若原始skl只有name属性,直接复用即可;若有多余属性,需显式构造{ name: student.skl.name } skl: student.skl })); }; // 执行转换 const result = extractTargetProperties(originalStudents); console.log(result);
关键说明
- Interface的核心作用是类型约束,在编译阶段就能检查输入输出的数据结构是否符合预期,避免因属性名拼写错误、类型不匹配导致的运行时问题。
- 如果原始的
skl对象包含多余属性,而你只需要保留name,则需要修改转换逻辑为skl: { name: student.skl.name },确保只保留目标属性。
内容的提问来源于stack exchange,提问作者Gem
相关产品推荐
相关产品推荐

