import { TypeString } from './TypeString'; import { TypeArray } from './TypeArray'; import { TypeBoolean } from './TypeBoolean'; import { TypeEnum } from './TypeEnum'; import { TypeNumber } from './TypeNumber'; import { TypeObject } from './TypeObject'; import { TypeOneOf } from './TypeOneOf'; import { TypeAny } from './TypeAny'; import { TypeDate } from './TypeDate'; import { TypeBinary } from './TypeBinary'; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; type IsUnion = [T] extends [UnionToIntersection] ? false : true; export type ResolveType = T extends string ? TypeString | TypeEnum | TypeOneOf : T extends number ? TypeNumber | TypeBinary | TypeBoolean | TypeEnum | TypeOneOf : T extends boolean ? TypeBoolean : T extends Date ? TypeDate : T extends Array ? TypeArray : T extends object ? TypeObject : IsUnion extends true ? TypeOneOf<[T]> : TypeAny; export type ObjectTyping = { [P in keyof Required]: ResolveType};