Некорректный код, нужен совет
Реализуйте функцию 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
→ Ссылка
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;
};