寻找TypeScript中类型安全的POJO扁平化工具类型实现方案
TypeScript 嵌套类型扁平化工具类型实现
实现代码
// 核心工具类型定义 type Flatten<T, Prefix extends string = ''> = T extends object ? { [K in keyof T & string]: `${Prefix}${Prefix extends '' ? '' : '.'}${K}` extends infer FullPath extends string ? T[K] extends object ? Flatten<T[K], FullPath> : Record<FullPath, T[K]> : never }[keyof T & string] extends infer AllFields ? { [K in keyof AllFields]: AllFields[K] } : never : never
测试验证
用示例接口测试效果如下:
interface Model { name: string; address: { zipcode: string; street: string; }; foo: { boo: { bar: number; } } } type FlatModel = Flatten<Model> // 推导得到的FlatModel结构完全符合预期: // { // name: string; // "address.zipcode": string; // "address.street": string; // "foo.boo.bar": number; // }
补充说明
当前实现默认处理纯对象的嵌套场景,如果需要支持数组、函数等特殊类型的自定义处理,可以根据业务需求调整递归分支的判断逻辑。
内容的提问来源于stack exchange,提问作者Renzhentaxi Baerde
相关产品推荐
相关产品推荐

