Некорректный код, нужен совет

Реализуйте функцию pow, которая возвращает возведенное в степень число и имеет два формата вызова - pow(base, exponent) и pow(base)(exponent).

const pow = (base: number, exponent?: number): number | ((exponent: number) => number) => {
    // Проверяем, что base является числом
    if (typeof base !== 'number') {
        throw new Error('INVALID_ARGUMENT');
    }

    // Если exponent передан и это число, возвращаем результат
    if (exponent !== undefined && typeof exponent === 'number') {
        return Math.pow(base, exponent);
    }

    // Возвращаем функцию, если exponent не передан
    return (exponent: number): number => {
        // Проверяем, что exponent является числом
        if (typeof exponent !== 'number') {
            throw new Error('INVALID_ARGUMENT');
        }
        return Math.pow(base, exponent);
    };
};

console.log(pow(2, 2)); // 4
console.log(pow(2)(2)); // 4

скриншот ошибки


Ответы (2 шт):

Автор решения: Qwertiy

playground

function pow(base: number, exp: number): number
function pow(base: number): (exp: number) => number
function pow(base: number, exp?: number) {
    return exp === undefined ? (exp: number) => base ** exp : base ** exp
}
→ Ссылка
Автор решения: Alexey Ten

Стрелочную функцию тоже можно, выглядит ужасно и приходится использовать any.

const pow: {
    (base: number): (exp: number) => number;
    (base: number, exp: number): number;
} = (base: number, exp?: number): any => {
    return exp === undefined ? (exp: number) => base ** exp : base ** exp;
};

playground

→ Ссылка