Тип '<T> (array: T [], pred: (x: T) => boolean, index: number) => void' не присваивается типу '() => void' - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать метод расширения для 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 [], пред : (x: T) => boolean, index: number) => void 'не может быть присвоено типу' () => void '. "

как показано в заголовке. Что дает, помощь ценится.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

В вашем интерфейсе есть метод, который не принимает параметров, поэтому () => void, но в реализации вы получаете некоторые параметры, в частности, с подписью (array: T[], pred: (x: T) => boolean, index: number) => void.

Это именно то, что компилятор пытается скажу вам.

Достаточно исправить интерфейс, чтобы он соответствовал вашей реализации.

0 голосов
/ 29 мая 2020

Вы должны указать аргументы функции в своем интерфейсе следующим образом:

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]];
}
...