mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-08-16 23:10:29 +00:00
add generics for spected
This commit is contained in:
Vendored
+13
-10
@@ -4,7 +4,7 @@
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.8
|
||||
|
||||
declare function spected<ROOTINPUT, SPEC = SpecObject<ROOTINPUT, ROOTINPUT>>(spec: SPEC, input: ROOTINPUT): Result<ROOTINPUT, SPEC>;
|
||||
declare function spected<ROOTINPUT, SPEC extends SpecValue<ROOTINPUT, ROOTINPUT> = SpecValue<ROOTINPUT, ROOTINPUT>>(spec: SPEC, input: ROOTINPUT): Result<ROOTINPUT, SPEC>;
|
||||
|
||||
type Predicate<INPUT, ROOTINPUT> = (value: INPUT, inputs: ROOTINPUT) => boolean;
|
||||
|
||||
@@ -12,20 +12,23 @@ type ErrorMsg<INPUT> =
|
||||
| (string | number | boolean | symbol | null | undefined | object)
|
||||
| ((value: INPUT, field: string) => any);
|
||||
|
||||
type SpecArrayElement<INPUT, ROOTINPUT> = [Predicate<INPUT, ROOTINPUT>, ErrorMsg<INPUT>];
|
||||
export type Spec<INPUT, ROOTINPUT = any> = [Predicate<INPUT, ROOTINPUT>, ErrorMsg<INPUT>];
|
||||
|
||||
export type SpecArray<INPUT, ROOTINPUT> = ReadonlyArray<SpecArrayElement<INPUT, ROOTINPUT>>;
|
||||
export type SpecArray<INPUT, ROOTINPUT = any> = Array<Spec<INPUT, ROOTINPUT>>;
|
||||
|
||||
export type SpecFunction<INPUT, ROOTINPUT> = INPUT extends ReadonlyArray<infer U>
|
||||
export type SpecFunction<INPUT, ROOTINPUT = any> = [INPUT] extends [ReadonlyArray<infer U>]
|
||||
? (value: INPUT) => ReadonlyArray<SpecArray<U, ROOTINPUT>>
|
||||
: (value: INPUT) => SpecObject<INPUT, ROOTINPUT>;
|
||||
: [INPUT] extends [object]
|
||||
? (value: INPUT) => SpecObject<INPUT, ROOTINPUT>
|
||||
: (value: INPUT) => SpecArray<INPUT, ROOTINPUT>;
|
||||
|
||||
export type SpecObject<INPUT, ROOTINPUT> = Partial<{[key in keyof INPUT]: SpecValue<INPUT[key], ROOTINPUT>}>;
|
||||
export type SpecObject<INPUT, ROOTINPUT = any> = Partial<{[key in keyof INPUT]: SpecValue<INPUT[key], ROOTINPUT>}>;
|
||||
|
||||
export type SpecValue<INPUT, ROOTINPUT> =
|
||||
| SpecArray<INPUT, ROOTINPUT>
|
||||
| SpecFunction<INPUT, ROOTINPUT>
|
||||
| SpecObject<INPUT, ROOTINPUT>;
|
||||
export type SpecValue<INPUT, ROOTINPUT = any> = [INPUT] extends [ReadonlyArray<any>]
|
||||
? SpecArray<INPUT, ROOTINPUT> | SpecFunction<INPUT, ROOTINPUT>
|
||||
: [INPUT] extends [object]
|
||||
? SpecArray<INPUT, ROOTINPUT> | SpecFunction<INPUT, ROOTINPUT> | SpecObject<INPUT, ROOTINPUT>
|
||||
: SpecArray<INPUT, ROOTINPUT> | SpecFunction<INPUT, ROOTINPUT>;
|
||||
|
||||
export type Result<INPUT, SPEC> = {[key in keyof INPUT]: true | any[] | Result<INPUT[key], any>};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user