export type Nominal = K & { __brand: T; toString: () => string; }; export type ValueOf = T[keyof T]; export type KeyValueTuple = { [K in keyof T]: [K, T[K]]; }[keyof T]; export type Callable = Array> = (...args: A) => T; export type TypeGuard = (input: unknown) => input is T; export type Guarded = T extends TypeGuard ? S : never; export type TypeDefinition = TypeGuard | string | Set | RegExp | { [K in keyof T]: TypeDefinition; }; export type TypeChecker = TypeGuard & { test(this: TypeChecker, input: unknown, route?: Array): Error | null; serialize(depth: number, done: Map): Generator; toString(): string; };