@codethread/tstl-validate
Version:
Fork and adaptation of valibot for use in typescript-to-lua
24 lines (23 loc) • 887 B
TypeScript
/** @noSelfInFile */
import { type EnumSchema, type ObjectSchema, type ObjectSchemaAsync } from '../../schemas/index';
/**
* Converts union to intersection types.
*/
type UnionToIntersection<T> = (T extends never ? never : (arg: T) => never) extends (arg: infer U) => never ? U : never;
/**
* Converts union to tuple types.
*/
type UnionToTuple<T> = UnionToIntersection<T extends never ? never : () => T> extends () => infer W ? [...UnionToTuple<Exclude<T, W>>, W] : [];
/**
* Returns a tuple or never type.
*/
type TupleOrNever<T> = T extends [string, ...string[]] ? T : never;
/**
* Creates a enum schema of object keys.
*
* @param schema The object schema.
*
* @returns A enum schema.
*/
export declare function keyof<TSchema extends ObjectSchema<any> | ObjectSchemaAsync<any>>(schema: TSchema): EnumSchema<TupleOrNever<UnionToTuple<keyof TSchema['object']>>>;
export {};