【发布时间】:2018-07-06 03:19:14
【问题描述】:
我在一个类上有这个方法签名:
lock(key: string, opts: any, cb?: LMClientLockCallBack): void;
如果用户这样使用它:
lock('foo', null, (err,val) => {
});
他们会得到正确的输入。但是,如果他们省略 options 参数并执行此操作:
lock('foo', (err,val) => {
});
然后tsc 将回调函数视为any 类型,就像这样:
有什么方法可以让用户避免将空对象或 null 作为第二个参数传递,并将回调转移过来?
我尝试将方法重载,分成两个定义:
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) { ... }
我明白了:
肯定有办法解决这个问题?
【问题讨论】:
标签: typescript typescript2.0 tsc