DeepPickFromPath<FlatModel, Path>: FlatModel extends undefined
    ? DeepPickFromPath<NonNullable<FlatModel>, Path> | undefined
    : FlatModel extends null
        ? DeepPickFromPath<NonNullable<FlatModel>, Path> | null
        : FlatModel extends any[]
            ? DeepPickFromPath<UnwrapArray<FlatModel>, Path>
            : Path extends `${infer Head}.${infer Tail}`
                ? Head extends keyof FlatModel
                    ? Tail extends "*"
                        ? {
                            [k in Head]: FlatModel[Head] extends Record<string, unknown>
                                ? NonRelationshipFields<FlattenArrays<FlatModel[Head]>>
                                : NonRelationshipFields<UnwrapArray<FlatModel[Head]>>
                        }
                        : {
                            [k in Head]: DeepPickFromPath<FlatModel[Head], Tail>
                        }
                    : never
                : Path extends keyof FlatModel
                    ? {
                        [K in Path]: FlatModel[Path]
                    }
                    : never

Picks object properties that match provided dot-separated Path

Type Parameters

  • FlatModel extends Model

  • Path extends string

    string union of dot-separated paths

Returns

union of object slices

Example

Given

FlatModel = {
title: string;
description?: string | null;
comments: {
content: string;
readonly id: string;
readonly createdAt: string;
readonly updatedAt: string;
}[];
readonly id: string;
readonly createdAt: string;
readonly updatedAt: string;
}

Path = 'title' | 'comments.id' | 'comments.content'

Returns

{ title: string } | { comments: { id: string} } | { comments: { content: string} }