import * as v from '@badrap/valita'; export type ToValidator = T extends readonly [infer Head, ...infer Rest] ? Rest extends [] ? v.TupleType<[ToValidator]> : v.TupleType<[ToValidator, ...ToValidatorTuple]> : T extends ReadonlyArray ? v.ArrayType> : T extends object ? ToObjectValidator : v.Type; // Helper type for converting tuple types type ToValidatorTuple = T extends readonly [infer Head, ...infer Rest] ? Rest extends [] ? [ToValidator] : [ToValidator, ...ToValidatorTuple] : []; // Helper type for converting object types type ToObjectValidator = v.ObjectType< { [K in keyof T]-?: undefined extends T[K] ? v.Optional> : ToValidator; }, undefined >;