UNPKG

funval

Version:

A minimalist library for data validation using functions interfaces.

18 lines (17 loc) 1.01 kB
import { AllowPartial, AnyType, FunctionType, Primitive, ResolvedValue } from './utils'; export declare type Output<T> = [T] extends [FunctionType] ? ResolvedValue<ReturnType<T>> : [T] extends [Primitive] ? T : [T] extends [RegExp] ? string : [T] extends [object] ? { [K in keyof T]: Output<T[K]>; } : never; declare type OptionalInputKeys<T> = Exclude<{ [K in keyof T]: [T[K]] extends [FunctionType] ? Parameters<T[K]> extends Required<Parameters<T[K]>> ? never : K : undefined extends T[K] ? K : never; }[keyof T], undefined>; declare type RequiredInputKeys<T> = Exclude<keyof T, OptionalInputKeys<T>>; export declare type Input<T> = T extends FunctionType ? Parameters<T>[0] : T extends Primitive ? T : T extends RegExp ? string : T extends Array<AnyType> ? { [K in keyof T]: Input<T[K]>; } : T extends object ? { [K in RequiredInputKeys<T>]: Input<T[K]>; } & { [K in OptionalInputKeys<T>]?: Input<T[K]>; } : never; declare type Type<T> = AllowPartial<Output<T>>; export default Type;