为未导出的typescript参数创建类型

时间:2018-01-17 09:12:18

标签: typescript types

我们使用的模块不会导出其所有参数的类型。这意味着参数是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); 

1 个答案:

答案 0 :(得分:1)

Type Inference with conditional types是为您提供的解决方案:

对于您的示例代码:

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    completionHandler(NCUpdateResultNoData);
}