У меня есть подпись этого метода для класса:
lock(key: string, opts: any, cb?: LMClientLockCallBack): void;
если пользователь использует его следующим образом:
lock('foo', null, (err,val) => {
});
они получат правильные наборы. Однако, если они опускают аргумент параметров и делают это:
lock('foo', (err,val) => {
});
затем tsc
видит функцию обратного вызова как тип any
, вот так:
Есть ли способ, позволяющий пользователям избегать передачи пустого объекта или нуля в качестве второго аргумента и перекладывать обратный вызов?
Я попытался перегрузить метод на два определения:
lock(key: string, cb: LMClientLockCallBack, n?: LMClientLockCallBack) : void;
lock(key: string, opts: any, cb?: LMClientLockCallBack) { ... }
но он все еще не компилируется, есть новые проблемы:
и если я попробую это:
lock(key: string, cb: LMClientLockCallBack) : void;
lock(key: string, opts: any, cb?: LMClientLockCallBack) { ... }
Я получаю это:
Неужели должно быть решение для этого?