我有一个定义为的接口(类型(
interface User {
name: string,
id: string,
age: number,
town: string
}
我现在有一个功能,可以搜索与特定字段匹配的用户。我不想手动声明另一种类型的UserFilter,例如:
interface UserFilter {
name: string[],
id: string[],
age: number[],
town: string[]
}
能够进行
function findUsers(filter: Partial<UserFilter>) {
if (filter.id) {
mySQLQueryBuilder.whereIn('id', filter.id)
}
...
}
基本上,在User中,每个键都是标量,而在UserFilter中,它现在是相同类型的数组。
我觉得必须创建一个单独的类型(UserFilter(,它与User非常相似,这是一种浪费,而且会为bug/维护带来更多的表面积。
理想情况下,我希望能够使用TypeScript的(实用程序?(类型将User
类型的字段基本上转换为相同类型的数组(我称之为ConvertAllKeysToArrays
(
function findUsers(filter: Partial<ConvertAllKeysToArrays<User>>) {
if (filter.id) {
mySQLQueryBuilder.whereIn('id', filter.id)
}
...
}
感谢
没有现有的实用程序类型,但我们可以使用映射的类型来创建自己的类型。
type MapToArrays<T> = {
[K in keyof T]: T[K][]
}
type UserFilter = MapToArrays<User>
游乐场