TypeScript uility类型将所有键类型转换为该键类型的数组



我有一个定义为的接口(类型(

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>

游乐场

最新更新