import { Input } from "./input"; import { Action } from "../classes/action"; import { Task } from "../classes/task"; import { CLI } from "../classes/cli"; export interface Inputs { [key: string]: Input; } type ActionheroWithParams = Action | Task | CLI; type KeysOfType = { [K in keyof T]: T[K] extends U ? K : never }[keyof T]; type FormatterOrString = I["formatter"] extends ( ...args: any[] ) => any ? ReturnType : string; type RequiredParamsKeys = KeysOfType< A["inputs"], Required >; type Variadic = { variadic: true }; type Required = Readonly<{ required: true }> | { required: true }; type ParamsExtractor = { [Input in keyof A["inputs"]]: A["inputs"][Input] extends Variadic ? FormatterOrString[] : FormatterOrString; }; export type ParamsFrom = Pick< ParamsExtractor, RequiredParamsKeys > & Partial>;