Package version:

Type Alias SearchPick<TModel, TFields>

SearchPick<TModel, TFields>: (<T>() => T extends TModel
        ? true
        : false) extends (<T>() => T extends object
        ? true
        : false)
    ? TModel
    : (<T>() => T extends TFields
            ? true
            : false) extends (<T>() => T extends any
            ? true
            : false)
        ? TModel
        : (<T>() => T extends TFields
                ? true
                : false) extends (<T>() => T extends never
                ? true
                : false)
            ? TModel
            : UnionToIntersection<TFields extends `${infer FieldName}/${infer RestPaths}`
                ? FieldName extends keyof TModel & string
                    ? NonNullable<TModel[FieldName]> extends (infer Elem)[]
                        ? Elem extends object
                            ? RestPaths extends SelectFields<(...)>
                                ? {
                                    [Key in (...) as (...)]: (...)
                                }
                                : never
                            : never
                        : NonNullable<(...)[(...)]> extends object
                            ? {
                                [Key in keyof (...) as (...) & (...)]: (...) extends (...)
                                    ? (...)
                                    : (...)
                            }
                            : never
                    : never
                : TFields extends keyof TModel
                    ? Pick<TModel, TFields> | Extract<TModel, null>
                    : never> & {}

Deeply pick fields of T using valid Cognitive Search OData $select paths.

Type Parameters