dilswer
Version:
Blazingly fast data validation library with TypeScript integration.
28 lines (27 loc) • 1.21 kB
TypeScript
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 {};