Почему мое ограничение Eq, основанное на перегруженной функции, не правильно выведено? - PullRequest
1 голос
/ 28 апреля 2020

Это простая попытка использовать перегруженную функцию в качестве ограничения равенства для обобщенной c функции высшего порядка:

function eq(x: boolean, y: boolean): boolean;
function eq(x: number, y: number): boolean;
function eq(x: string, y: string): boolean;

function eq(x: any, y: any) { return x === y };

const arrEq = <A>(eq: (x: A, y: A) => boolean) => (xs: A[]) => (ys: A[]) => {
    const go = (b: boolean, i: number): boolean =>
        b === false ? false
            : i === xs.length ? true
                : go(eq(xs[i], ys[i]), i + 1);

    return go(true, 0)
};

arrEq(eq) ([1, 2, 3]) ([1, 2, 3]); // A

Playground

In line A переменная типа A выводится как string, что выглядит совершенно произвольно. Как я могу это исправить?

...