Mongodb 筛选器的泛型类型脚本类型
我有通用存储库接口:Mongodb 筛选器的泛型类型脚本类型,mongodb,typescript,typescript-generics,Mongodb,Typescript,Typescript Generics,我有通用存储库接口: type RecursivePartial<T> = { [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object ? RecursivePartial<T[P]> : T[P]; }; interface Repository<T> { all(filters?: Recur
type RecursivePartial<T> = {
[P in keyof T]?:
T[P] extends (infer U)[] ? RecursivePartial<U>[] :
T[P] extends object ? RecursivePartial<T[P]> :
T[P];
};
interface Repository<T> {
all(filters?: RecursivePartial<T>): T[] | Promise<T[]>;
find(filters: RecursivePartial<T>): T | undefined | Promise<T | undefined>;
create(entity: T): T | Promise<T>;
update(entity: T, fields: RecursivePartial<T>): T | Promise<T>;
}
很好。但现在,当我拥有从MongoDB查询数据的存储库时,我需要一种既支持精确过滤又支持类似查询的类型
repository.find({ property: { $exists: true } })
另外,也许您知道如何处理Promise | T您可以在
T[p]
基本情况中添加一个额外的联合类型:
type HigherFilter = {
$exists?: boolean,
};
type RecursivePartial<T> = {
[P in keyof T]?:
T[P] extends (infer U)[] ? RecursivePartial<U>[] :
T[P] extends object ? RecursivePartial<T[P]> :
T[P] | HigherFilter; // <---- HERE
};
类型高级过滤器={
$exists?:布尔值,
};
类型RecursivePartial={
[P in keyof T]?:
T[P]扩展(推断U)[]?递归部分[]:
T[P]扩展对象?递归部分:
T[P]|高滤器//
type HigherFilter = {
$exists?: boolean,
};
type RecursivePartial<T> = {
[P in keyof T]?:
T[P] extends (infer U)[] ? RecursivePartial<U>[] :
T[P] extends object ? RecursivePartial<T[P]> :
T[P] | HigherFilter; // <---- HERE
};