如何用TypeScript工具类型将接口所有字段转为对应类型数组?
解决方案:用TypeScript映射类型自动生成过滤接口
你可以通过TypeScript的映射类型实现ConvertAllKeysToArrays工具类型,自动将目标接口的所有字段转为对应类型的数组,再结合Partial让过滤参数的每个字段都可选。
实现工具类型
type ConvertAllKeysToArrays<T> = { [K in keyof T]: T[K][] };
这个类型会遍历传入的泛型T的所有键K,将每个键对应的原始类型T[K]替换为该类型的数组T[K][]。
完整使用示例
// 原始用户接口 interface User { name: string; id: string; age: number; town: string; } // 自动转换字段为数组的工具类型 type ConvertAllKeysToArrays<T> = { [K in keyof T]: T[K][] }; // 定义查询函数,参数为可选的过滤条件 function queryUsers(filter: Partial<ConvertAllKeysToArrays<User>>) { // 这里编写你的用户查询逻辑 } // 调用示例:支持传入任意组合的过滤字段 queryUsers({ name: ["Alice", "Bob"], age: [25, 30] }); queryUsers({ town: ["London", "Paris"] }); queryUsers({ id: ["user_123", "user_456"] });
优势
当User接口的字段更新(比如新增/删除字段、修改字段类型)时,ConvertAllKeysToArrays<User>会自动同步更新,无需手动维护单独的UserFilter接口,彻底避免冗余定义和类型不一致问题。
内容的提问来源于stack exchange,提问作者friartuck
相关产品推荐
相关产品推荐

