diff --git a/types/spected/index.d.ts b/types/spected/index.d.ts index 7757a05aed..691abd0355 100644 --- a/types/spected/index.d.ts +++ b/types/spected/index.d.ts @@ -4,7 +4,7 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 -declare function spected>(spec: SPEC, input: ROOTINPUT): Result; +declare function spected = SpecValue>(spec: SPEC, input: ROOTINPUT): Result; type Predicate = (value: INPUT, inputs: ROOTINPUT) => boolean; @@ -12,20 +12,23 @@ type ErrorMsg = | (string | number | boolean | symbol | null | undefined | object) | ((value: INPUT, field: string) => any); -type SpecArrayElement = [Predicate, ErrorMsg]; +export type Spec = [Predicate, ErrorMsg]; -export type SpecArray = ReadonlyArray>; +export type SpecArray = Array>; -export type SpecFunction = INPUT extends ReadonlyArray +export type SpecFunction = [INPUT] extends [ReadonlyArray] ? (value: INPUT) => ReadonlyArray> - : (value: INPUT) => SpecObject; + : [INPUT] extends [object] + ? (value: INPUT) => SpecObject + : (value: INPUT) => SpecArray; -export type SpecObject = Partial<{[key in keyof INPUT]: SpecValue}>; +export type SpecObject = Partial<{[key in keyof INPUT]: SpecValue}>; -export type SpecValue = - | SpecArray - | SpecFunction - | SpecObject; +export type SpecValue = [INPUT] extends [ReadonlyArray] + ? SpecArray | SpecFunction + : [INPUT] extends [object] + ? SpecArray | SpecFunction | SpecObject + : SpecArray | SpecFunction; export type Result = {[key in keyof INPUT]: true | any[] | Result};