如何将函数接口与具有返回值的回调一起使用

时间:2018-11-01 08:36:49

标签: typescript

我正在尝试TypeScript,并试图围绕函数接口的工作方式来思考。我编写了一个简单的接口,可以选择接受Context断言的对象,以便可以在类上下文的内部和外部使用它。

界面

interface EHandler {
    (ctx?: Context): Context
}

功能

let testFn: EHandler = function(_ctx: Context): Context {
    // Do some work with the Context object
    return _ctx;
}(ctx)

在这种情况下,短绒棉通知我;

Type 'Context' is not assignable to type 'EHandler'.

类方法

我不确定这是否是执行此操作的正确方法,但这就是我尝试在类定义中执行此操作的方式

protected TestHandler: EHandler = (): Context => {
    // Do some work with the Context object which is now accessible with this
    return this.context;
}

使用上述定义的类方法

protected use(method: string, handler: EHandler): void {
    this.middleware.use(method, handler);
}

试用

this.use('delete', this.TestHandler());

这会产生以下错误:

Argument of type 'Context' is not assignable to parameter of type '<Context>() => EHandler'.
    Type 'Context' provides no match for the signature '<Context>(): EHandler'.

我很难找到具有正确返回值的任何有效示例。我想要达到的目标甚至有可能吗?

顺便说一句,我应用函数接口的方式是否正确?最初,我认为这会像这样简单:`受保护的TestHandler

1 个答案:

答案 0 :(得分:0)

据我了解您的要求,功能接口已正确定义。唯一需要注意的是,您也可以使用简单的函数签名。

type EHandler = (ctx?: Context) => Context

调用use的问题是调用TestHander函数。您要做的实际上是将函数本身传递给use,而不是调用该函数的结果:

class Context { p: null }
    type EHandler = (ctx?: Context) => Context

class a {
    constructor() {
        this.use('delete', this.TestHandler); // ok 
    }
    private context: Context
    protected TestHandler: EHandler = (): Context => {
        // Do some work with the Context object which is now accessible with this
        return this.context;
    }

    protected use(method: string, handler: EHandler): void {
        // code
    }
}