type XCanonicalTuple = (Value extends [infer Left, ...infer Right extends unknown[]] ? [XCanonical, ...XCanonicalTuple] : []); type XCanonicalArray[]> = Result; type XCanonicalObject = { -readonly [Key in keyof Value]: XCanonical; }> = Result; export type XCanonical = (Schema extends readonly [...infer Schemas extends unknown[]] ? XCanonicalTuple : Schema extends readonly (infer Schema)[] ? XCanonicalArray : Schema extends object ? XCanonicalObject : Schema); export {};