UNPKG

dilswer

Version:

Blazingly fast data validation library with TypeScript integration.

28 lines (27 loc) 1.21 kB
import type { AnyType, BasicType, FieldDescriptor, RecordTypeSchema } from "../data-types/type-types"; import { RecordType } from "../data-types/types/record"; import { UnionType } from "../data-types/types/union"; type GetType<T extends AnyType | FieldDescriptor> = T extends FieldDescriptor ? T["type"] : T; export type RequiredRecord<R extends RecordTypeSchema> = RecordType<{ [K in keyof R]: { required: true; type: GetType<R[K]>; }; }>; export type PartialRecord<R extends RecordTypeSchema> = RecordType<{ [K in keyof R]: { required: false; type: GetType<R[K]>; }; }>; export type OmitRecord<R extends RecordTypeSchema, OK extends keyof R> = RecordType<{ [K in keyof R as K extends OK ? never : K]: R[K]; }>; export type PickRecord<R extends RecordTypeSchema, PK extends keyof R> = RecordType<{ [K in keyof R as K extends PK ? K : never]: R[K]; }>; export type SumRecord<R1 extends RecordTypeSchema, R2 extends RecordTypeSchema> = RecordType<{ [K in keyof R1 as K extends keyof R2 ? never : K]: R1[K]; } & R2>; export type ExcludeOneOf<U extends UnionType, E extends BasicType> = UnionType<Array<Exclude<U["oneOf"][number], E>>>; export {};