Type alias ExtractObjectAllPaths<T, K>

ExtractObjectAllPaths<T, K>: If_PlainObject<T> extends true
    ? {
        [P in keyof T]: P extends string | number
            ? If_PlainObject<T[P]> extends true
                ? K extends ""
                    ? ExtractObjectPaths<T[P], `${P}`>
                    : ExtractObjectPaths<T[P], `${K}.${P}`>
                : T[P] extends (infer U)[]
                    ? K extends ""
                        ? ExtractObjectPaths<U, `${P}[0]`>
                        : ExtractObjectPaths<U, `${K}.${P}[0]`>
                    : K extends ""
                        ? `${P}`
                        : `${K}.${P}` | `${K}`
            : never
    }[keyof T]
    : T extends (infer U)[]
        ? ExtractObjectPaths<U, `${K}[0]`>
        : never

传入一个任意嵌套深度的对象类型,返回该对象所有键路径组成的联合类型,这个会包含中间路径,路径分隔符为. 可与ExtractObjectPaths进行对比参照

Type Parameters

  • T

  • K extends string = ""

Example

ExtractObjectAllPaths<{
a: string;
b: {
c: number;
d: {
e: string
}
}
}> // "a" | "b" | "b.c" | "b.d" | "b.d.e"

Generated using TypeDoc