valia
Version:
A runtime data validator in TypeScript with advanced type inference, built-in validation functions, and seamless integration for server and client environments.
29 lines (24 loc) • 991 B
text/typescript
import type { SetableCriteriaTemplate, ClassicTypesTemplate, GenericTypesTemplate, KeyofFormatClassicTypes,
SetableCriteria, MountedCriteria, GuardedCriteria } from "../types";
export interface UnionSetableCriteria<
T extends KeyofFormatClassicTypes = KeyofFormatClassicTypes
> extends SetableCriteriaTemplate<"union"> {
union: [SetableCriteria<T>, ...SetableCriteria<T>[]];
}
export interface UnionClassicTypes<T extends KeyofFormatClassicTypes> extends ClassicTypesTemplate<
UnionSetableCriteria<T>,
{}
> {}
export interface UnionMountedCriteria {
union: [MountedCriteria<SetableCriteria>, ...MountedCriteria<SetableCriteria>[]];
}
type UnionGuardedCriteria<T extends UnionSetableCriteria> = {
[I in keyof T['union']]:
T['union'][I] extends SetableCriteria
? GuardedCriteria<T['union'][I]>
: never;
}[keyof T['union']];
export interface UnionGenericTypes<T extends UnionSetableCriteria> extends GenericTypesTemplate<
UnionMountedCriteria,
UnionGuardedCriteria<T>
> {}