呼叫签名在与params的接口内不兼容

时间:2014-01-17 10:58:02

标签: javascript typescript

我有两个接口:IEventIWorkflowResizedEvent扩展了第一个接口。

interface IEvent {
    add?(listener: ()=> void): void;
    remove?(listener: ()=> void): void;
    trigger?(...a: any[]): void;
}

interface IWorkflowResizedEvent extends IEvent {
    add(listener:(args: WorkflowResizedEventArgs) => void): void;
    remove(listener:(args: WorkflowResizedEventArgs) => void ): void;
    trigger(args: WorkflowResizedEventArgs): void;
}

interface WorkflowResizedEventArgs {
}

我收到错误:

  

接口'IWorkflowResizedEvent无法扩展接口'IEvent':   类型'IWorkflowResizedEvent'和。的属性'触发器'的类型   'IEvent'不兼容:调用类型的签名'(args:   WorkflowResizedEventArgs)=> void'和'(... a:any())=>无效的   不兼容:呼叫签名需要0个或更少的参数。

之前我使用的是TypeScript库的旧版本,而且这段代码运行良好...现在我已经将库更新到最新版本并且问题已经开始了。我发现整个语言规范变化如此强烈......

有没有人知道这里有什么问题?它看起来应该没问题。

1 个答案:

答案 0 :(得分:1)

TypeScript ...(所谓的 spread 运算符)中代表我们从C#知道的params
根据新标准,您将在方法调用/覆盖中使用扩展运算符。这就是IWorkflowResizedEvent无法扩展IEvent的原因。

试试这个:

interface IEvent {
    add?(listener: ()=> void): void;
    remove?(listener: ()=> void): void;
    trigger?(...a: any[]): void;
}

interface IWorkflowResizedEvent extends IEvent {
    add(listener:(args: WorkflowResizedEventArgs) => void): void;
    remove(listener:(args: WorkflowResizedEventArgs) => void ): void;
    trigger(...args: WorkflowResizedEventArgs[]): void;
}

interface WorkflowResizedEventArgs {
}