首页 > 解决方案 > 类型 '(array: T[], pred: (x: T) => boolean, index: number) => void' 不能分配给类型 '() => void'

问题描述

我正在尝试为 Array 创建一个扩展方法。

这是我创建的:

interface Array<T> {
    moveServiceBranchInArray(): void;
}

Array.prototype.moveServiceBranchInArray = function<T> (array: T[], pred: (x: T) => boolean, index: number): void 
{ 
    const curPos: number = array.findIndex(pred);
    index = Math.max(Math.min(index, array.length - 1), 0);

    if (curPos < 0) {
      return;
    }
    [array[curPos], array[index]] = [array[index], array[curPos]];
}

不幸的是,我收到了错误

“类型 '(array: T[], pred: (x: T) => boolean, index: number) => void' 不可分配给类型 '() => void'。”

如标题所示。什么给了,帮助表示赞赏。

标签: typescriptextension-methodstypescript-generics

解决方案


您的接口有一个不带参数的方法,因此() => void,但在实现中您会获得一些参数,特别是带有签名的参数(array: T[], pred: (x: T) => boolean, index: number) => void

这正是编译器试图告诉你的。

修复接口以使其与您的实现相匹配就足够了。


推荐阅读