UNPKG

@backland/schema

Version:

TypeScript schema declaration and validation library with static type inference

15 lines (14 loc) 1.08 kB
import { ArrayFieldDef } from '../ArrayField'; import { FieldTypeName } from '../_fieldDefinitions'; import { InferField } from './InferField'; import { InferObjectDefinition } from './InferObjectType'; import { InferTypeName } from './InferString'; export type InferFinalField<TypeName extends FieldTypeName, Def = never> = _InferFinalField<TypeName, Def>; export type _InferFinalField<TypeName, Def> = TypeName extends 'literal' ? Def : TypeName extends 'array' ? [Def] extends [ArrayFieldDef<infer Of>] ? InferField<Of>[] : never : TypeName extends 'object' ? [Def] extends [object] ? InferObjectDefinition<Def> : never : TypeName extends 'enum' ? [Def] extends [ReadonlyArray<infer Item>] ? Item : never : TypeName extends 'union' ? [Def] extends [ReadonlyArray<infer Item>] ? InferField<Item> : never : TypeName extends 'record' ? [Def] extends [{ keyType?: infer KeyType; type?: infer Type; }] ? { [K in KeyType extends 'int' | 'float' ? number : string]: InferField<Type>; } : { [K: string]: any; } : TypeName extends 'literal' ? Def : InferTypeName<TypeName>;