TypeScript中如何正确使用Object.entries配合map实现带类型安全的数据转换
实现类型安全的转换方案
你只需要先为原始接口返回数据、转换后的目标数据分别定义类型约束,再给转换逻辑加上类型标注即可,完整实现如下:
步骤1:定义类型
// 定义商品图片结构 interface ProductImage { url: string; } // 定义原始接口返回的单个商品结构 interface RawProduct { amount: number; id: number; image: ProductImage; name: string; price: number; } // 定义接口整体响应结构:键是字符串类型的唯一标识,值为原始商品结构 type ApiResponse = Record<string, RawProduct>; // 定义转换后的目标商品结构 interface TransformedProduct { amount: number; id: string; // 替换为接口返回的字符串键作为新的id image: ProductImage; name: string; price: number; // 如果需要保留原始的数字id,可以额外增加字段 rawId: number }
步骤2:添加类型标注的转换代码
// 请求接口拿到的data需要先标注为ApiResponse类型 const transformedData: TransformedProduct[] = Object.entries(data as ApiResponse).map(([key, value]): TransformedProduct => { return { ...value, id: key, // 保留原始id的写法:rawId: value.id }; });
补充说明
如果无法保证接口返回字段100%符合定义的RawProduct结构,可以搭配运行时校验库做类型守卫,避免后端返回异常字段导致的类型不匹配问题。
内容的提问来源于stack exchange,提问作者I3artosh
相关产品推荐
相关产品推荐

