Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое переопределение функции?
Переопределение функции — это процесс создания функции с тем же именем, но с другой реализацией или сигнатурой. В JavaScript это приводит к перезаписи (overwriting), а в TypeScript это может означать перегрузку (overloading) или переопределение в подклассе (overriding).
В JavaScript: Перезапись функции
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Alice")); // "Hello, Alice!"
function greet(name) {
return `Hi, ${name}!`;
}
console.log(greet("Bob")); // "Hi, Bob!"
В TypeScript: Перегрузка (Overloading)
function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: number | string, b: number | string): number | string {
if (typeof a === "number" && typeof b === "number") {
return a + b;
}
if (typeof a === "string" && typeof b === "string") {
return a + b;
}
throw new Error("Invalid types");
}
console.log(add(1, 2)); // 3
console.log(add("Hello", " World")); // "Hello World"
В ООП: Переопределение в подклассе (Overriding)
class Animal {
speak() {
console.log("Animal makes a sound");
}
}
class Dog extends Animal {
speak() {
console.log("Dog barks");
}
}
const dog = new Dog();
dog.speak(); // "Dog barks"
Практический пример в Node.js Backend
class UserService {
async getUser(id: string) {
return await db.query("SELECT * FROM users WHERE id = $1", [id]);
}
}
class PremiumUserService extends UserService {
async getUser(id: string) {
const user = await super.getUser(id);
user.benefits = await this.getPremiumBenefits(id);
return user;
}
private async getPremiumBenefits(id: string) {
return await db.query("SELECT * FROM premium_benefits WHERE user_id = $1", [id]);
}
}
Методы объектов
const obj = {
method: function() {
return "version 1";
}
};
obj.method = function() {
return "version 2";
};
console.log(obj.method()); // "version 2"
Множественная перегрузка
class Logger {
log(message: string): void;
log(message: string, level: "info" | "warn" | "error"): void;
log(message: string, level: string = "info"): void {
console.log(`[${level.toUpperCase()}] ${message}`);
}
}
const logger = new Logger();
logger.log("Simple message");
logger.log("Warning message", "warn");
Важные отличия
- Overwriting (JavaScript) — замена функции полностью
- Overloading (TypeScript) — разные сигнатуры, одна реализация
- Overriding (ООП) — замена метода в подклассе