@backland/schema
Version:
TypeScript schema declaration and validation library with static type inference
15 lines (14 loc) • 1.08 kB
TypeScript
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>;