实现变量也是方法的接口

Implement interface where variable is also a method

如何实例化此类接口 (d.ts)?

export interface IReply {
    <T>(err: Error, result?: string | number | boolean | Buffer | stream.Stream | IPromise<T> | T, credentialData?: any): IBoom;
    <T>(result: string | number | boolean | Buffer | stream.Stream | IPromise<T> | T): Response;
    continue(credentialData?: any): void;
    //...
}

目标是调用此函数(hapi 处理程序函数):

static healthcheck: ISessionHandler = (request: Request, reply: IReply): void => {

    reply({healthy: true});
};

以这种方式:

HealthcheckController.healthcheck(request, (reply) => {

    console.log('reply : ' + reply);
});

如果我删除输入要求,这一切都有效 -> 有效 JavaScript。但似乎无法让它在 TypeScript 中工作。它在 tsc 上失败了。

我似乎无法实例化允许我使用 TypeScript 成功调用我的 healthcheck 函数的 reply 变量。

您可以按照下面的示例(稍微简化)进行操作:

export interface IReply 
{
    (result: any): string;
    continue(credentialData?: any): void;
}

let healthCheck = (reply: IReply): void => 
{
    reply({healthy: true});
};

var f = <IReply>((reply: any) => { console.log("reply: ",  reply); return reply; });
f.continue = (credentialData?: any) => { console.log("continue: ", credentialData)};

healthCheck(f);