interface Runner { run(): Promise; } type WorkerOptions = { name: string; }; class Worker implements Runner { constructor(private readonly options: WorkerOptions) {} async run(): Promise { return this.options.name; } } export function createWorker(options: WorkerOptions): Runner { return new Worker(options); } export const defaultWorker = () => createWorker({ name: "default" });