我们使用的模块不会导出其所有参数的类型。这意味着参数是typechecked但我们无法在方法调用之前定义所需类型的变量。
示例:
// library
interface Internal { foo(): number } // I want to have a name for this un-exported interface
class A {
bar(s: string, x: Internal): string {
return s + x.foo(); // whatever
}
}
export const Exported = A;
使用Exported.bar
时,有没有办法让我先定义参数,以便正确输入?
let e = new Exported();
let x : /*???*/;
e.bar("any ideas?", x);
我想到了一种使用泛型来创建null
类型Internal
的方法,所以我可以给x
正确的类型,但这很笨重,有没有办法捕获这个类型是type
定义并更清晰地使用它?
function deduce<T>(f: (s: string, t: T) => any): T {
return null;
}
let x = deduce(e.bar);
答案 0 :(得分:1)
Type Inference with conditional types是为您提供的解决方案:
对于您的示例代码:
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
completionHandler(NCUpdateResultNoData);
}