我正在尝试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
答案 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
}
}