你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
SearchPick type
使用有效的认知搜索 OData $select路径深入选取 T 字段。
type SearchPick<TModel, TFields> = () => (
T extends TModel ? true : false
) extends () => T extends object ? true : false
? TModel
: () => (T extends TFields ? true : false) extends () => T extends any
? true
: false
? TModel
: () => (T extends TFields ? true : false) extends () => T extends never
? true
: false
? TModel
: UnionToIntersection<
TFields extends Object
? FieldName extends keyof TModel & string
? NonNullable<TModel[FieldName]> extends Elem[]
? Elem extends object
? RestPaths extends SelectFields<Elem>
? {
[Key in keyof TModel as Key &
FieldName]: SearchPick<Elem, RestPaths>[]
}
: never
: never
: NonNullable<TModel[FieldName]> extends object
? {
[Key in keyof TModel as Key &
FieldName]: RestPaths extends SelectFields<
TModel[Key] & {}
>
?
| SearchPick<TModel[Key] & {}, RestPaths>
| Extract<TModel[Key], null>
: never
}
: never
: never
: TFields extends keyof TModel
? Pick<TModel, TFields> | Extract<TModel, null>
: never
> & {}