diff --git a/types/prompts/index.d.ts b/types/prompts/index.d.ts index 152d6326e8..7aa3f2ea63 100644 --- a/types/prompts/index.d.ts +++ b/types/prompts/index.d.ts @@ -1,12 +1,16 @@ // Type definitions for prompts 1.1 // Project: https://github.com/terkelg/prompts // Definitions by: Berkay GURSOY +// Daniel Perez Alvarez // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.1 +// TypeScript Version: 2.8 export = prompts; -declare function prompts(questions: prompts.PromptObject | prompts.PromptObject[], options?: prompts.Options): any; +declare function prompts( + questions: prompts.PromptObject | Array>, + options?: prompts.Options +): Promise>; declare namespace prompts { // Circular reference from prompts @@ -15,8 +19,7 @@ declare namespace prompts { function inject(obj: any): void; namespace inject { - const prototype: { - }; + const prototype: {}; } namespace prompts { @@ -51,15 +54,15 @@ declare namespace prompts { onCancel: (prompt: PromptObject, answers: any) => void; } - interface PromptObject { - type: string | ((prev: any, values: any, prompt: PromptObject) => void); - name: string | ((prev: any, values: any, prompt: PromptObject) => void); - message?: string | ((prev: any, values: any, prompt: PromptObject) => void); + interface PromptObject { + type: ValueOrFunc; + name: ValueOrFunc; + message?: ValueOrFunc; initial?: string; style?: string; - format?: ((prev: any, values: any, prompt: PromptObject) => void); - validate?: ((prev: any, values: any, prompt: PromptObject) => void); - onState?: ((prev: any, values: any, prompt: PromptObject) => void); + format?: PrevCaller; + validate?: PrevCaller; + onState?: PrevCaller; min?: number; max?: number; float?: boolean; @@ -73,4 +76,14 @@ declare namespace prompts { suggest?: ((prev: any, values: any, prompt: PromptObject) => void); limit?: number; } + + type Answers = { [id in T]: any }; + + type PrevCaller = ( + prev: any, + values: Answers, + prompt: PromptObject + ) => R; + + type ValueOrFunc = T | PrevCaller; } diff --git a/types/prompts/prompts-tests.ts b/types/prompts/prompts-tests.ts index 0b89cb3721..bd35868c66 100644 --- a/types/prompts/prompts-tests.ts +++ b/types/prompts/prompts-tests.ts @@ -1,8 +1,14 @@ import prompts = require("prompts"); -const response = prompts({ - type: 'number', - name: 'value', - message: 'Input value to double:', - validate: (value: any) => value < 0 ? `Cant be less than zero` : true -}); +type HasProperty = K extends keyof T ? true : false; + +(async () => { + const response = await prompts({ + type: "number", + name: "value", + message: "Input value to double:", + validate: (value: any) => (value < 0 ? `Cant be less than zero` : true) + }); + const HasPropValue: HasProperty = true; + const DoesntHavePropAsdf: HasProperty = false; +})();