export type TaskRunner = (options: T) => Promise; export class Task { name: string; runner: (options: TOptions) => Promise; options: TOptions; setName = name => { this.name = name; }; setRunner = (runner: TaskRunner) => { this.runner = runner; }; setOptions = options => { this.options = options; }; exec = () => { return this.runner(this.options); }; }