Ответ
TypeScript поддерживает ключевые концепции ООП: классы, интерфейсы, наследование, инкапсуляцию и полиморфизм.
Классы с модификаторами доступа (public, private, protected):
class Animal {
private name: string;
constructor(name: string) { this.name = name; }
protected speak(): void { console.log(`${this.name} makes a sound`); }
}
Наследование:
class Dog extends Animal {
bark(): void { this.speak(); } // доступ к protected методу
}
Интерфейсы для описания контрактов:
interface Movable {
move(): void;
}
class Car implements Movable {
move() { console.log("Driving..."); }
}
Абстрактные классы и перегрузка методов также поддерживаются. TypeScript добавляет статическую типизацию, что делает ООП-код более предсказуемым.
Ответ 18+ 🔞
А, ну это ж классика, блядь! ООП в TypeScript — это как Герасим с Муму, только без утопления в конце, слава богу. Слушай сюда, разжуем.
Ну типа, представь, ты строишь дом. Класс — это чертёж, ёпта, схема, по которой ты будешь штамповать квартиры-объекты. И чтобы соседи не лазили к тебе в холодильник, есть модификаторы доступа — private, public, protected. private — это твой личный дневник, нахуй никому не покажешь. protected — как семейный рецепт, только своим наследникам. public — ну это как подъезд, все туда срут.
Вот, смотри, как это выглядит, блядь:
class Animal {
private name: string; // Секретная кличка, никому не скажем
constructor(name: string) { this.name = name; }
protected speak(): void { console.log(`${this.name} makes a sound`); } // Только детям можно
}
А теперь наследование — это когда твой сынок-программист получает от тебя в наследство кривые руки и долги, но также и доступ к protected методам! Красота, да?
class Dog extends Animal {
bark(): void {
this.speak(); // Папин секретный метод — теперь и мой!
console.log("Гав-гав, сука!");
}
}
Дальше — интерфейсы. Это как договор в бане, ёбта. Подписался — будь добр, выполняй. Говоришь, что умеешь двигаться (Movable) — так двигайся, нахуй, не ссы!
interface Movable {
move(): void;
}
class Car implements Movable {
move() {
console.log("Еду, блядь, не мешай!");
// А если не реализуешь move() — компилятор тебя ебнет, как Герасим Муму
}
}
Ну и верх пирога — абстрактные классы и перегрузка методов. Абстрактный класс — это как дедушка, который только учит жизни, но сам нихуя не делает. Нельзя создать его экземпляр, только наследоваться. А перегрузка — это когда ты один метод называешь по-разному, в зависимости от того, что в него суёшь. Гибкость, блядь, овердохуищная!
TypeScript поверх этого всего ещё и статическую типизацию натягивает, как презерватив на банан. Код становится предсказуемым, как итог встречи с тёщей — знаешь, что будет пиздец, но хотя бы готов к нему.
Вот и вся философия, если в двух словах. Создаёшь чёткие схемы (классы), наводишь порядок в доступе (инкапсуляция), плодишь наследников (наследование), заставляешь всех играть по правилам (интерфейсы) и используешь одно и то же по-разному (полиморфизм). А TypeScript следит, чтобы ты не обосрался на этапе написания кода, а не когда всё уже ебнулось в продакшене. Гениально и просто, как "Муму", только со счастливым концом.