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

Type '<T>(array: T[], pred: (x: T) => boolean, index: number) => void' is not assignable to type '() => 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'。"

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

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

这正是编译器试图告诉您的内容。

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

您应该像这样在接口中指定函数参数:

interface Array<T> {
    moveServiceBranchInArray(array: T[], pred: (x: T) => boolean, index: number): 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]];
}