UNPKG

@sinclair/typebox

Version:

Json Schema Type Builder with Static Type Resolution for TypeScript

18 lines (17 loc) 1.13 kB
import type { TSchema, SchemaOptions } from '../schema/index'; import type { Static } from '../static/index'; import type { Ensure } from '../helpers/index'; import { Kind } from '../symbols/index'; type FunctionStaticReturnType<T extends TSchema, P extends unknown[]> = Static<T, P>; type FunctionStaticParameters<T extends TSchema[], P extends unknown[], Acc extends unknown[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? FunctionStaticParameters<R, P, [...Acc, Static<L, P>]> : Acc; type FunctionStatic<T extends TSchema[], U extends TSchema, P extends unknown[]> = (Ensure<(...param: FunctionStaticParameters<T, P>) => FunctionStaticReturnType<U, P>>); export interface TFunction<T extends TSchema[] = TSchema[], U extends TSchema = TSchema> extends TSchema { [Kind]: 'Function'; static: FunctionStatic<T, U, this['params']>; type: 'Function'; parameters: T; returns: U; } /** `[JavaScript]` Creates a Function type */ export declare function Function<T extends TSchema[], U extends TSchema>(parameters: [...T], returns: U, options?: SchemaOptions): TFunction<T, U>; export {};