У меня есть функция, написанная на TypeScript, которая выполняет бинарный поиск. Обычно я позволяю ему работать с числовыми массивами, но я хотел сделать его более общим. Вот код, который я получил сейчас:
export function binarySearchLessOrEqual(arr: number[], key: number): number;
export function binarySearchLessOrEqual<T>(arr: T[], key: number, valueGetter?: (x: T) => number): number {
...
}
Для универсальной версии требуется третий аргумент valueGetter
, который отображает каждое значение из arr
в некоторое числовое значение, которое затем используется для двоичного кода. поиск.
Пример моего вызова:
interface Thing {
x: number
}
let numberArr: [0, 1, 2];
binarySearchLessOrEqual(numberArr, 1);
let thingArr: Thing[] = [{x: 0}, {x: 1}, {x: 2}];
binarySearchLessOrEqual(thingArr, 1, (o) => o.x);
binarySearchLessOrEqual
с использованием numberArr
работает, как и ожидалось, однако вызов его с thingArr
throws Ожидаемые 2 аргумента, нополучил 3.ts (2554) .
Почему? Очевидно, что thingArr
не является типом number[]
, TypeScript должен попытаться вызвать функцию со второй сигнатурой, которая имеет три аргумента.