Какие знаешь парадигмы в TypeScript

Ответ

TypeScript поддерживает несколько парадигм программирования:

  1. ООП (Объектно-ориентированное)
    Классы, интерфейсы, наследование, инкапсуляция, полиморфизм.
    class Animal {
      constructor(public name: string) {}
      move(distance: number) {
        console.log(`${this.name} moved ${distance}m`);
      }
    }
  1. Функциональное программирование
    Чистые функции, иммутабельность, функции высшего порядка.
    const add = (a: number, b: number): number => a + b;
    const numbers = [1, 2, 3].map(x => x * 2);
  1. Процедурное программирование
    Последовательные операции, функции без состояния.

  2. Реактивное программирование
    Работа с потоками данных (RxJS).

  3. Generic-программирование
    Обобщённые типы для создания гибких компонентов.

    function identity<T>(arg: T): T {
      return arg;
    }

Ответ 18+ 🔞

Да ты посмотри, на что этот TypeScript способен! Прямо как швейцарский нож, только для мозга, блядь. Сидит такой разработчик и думает: "В какую сторону сегодня ебашить?" А вариантов — овердохуища!

Вот, например, ООП — классика жанра, ебать мои старые костыли. Всё по-взрослому: классы, интерфейсы, наследование. Чувак создаёт Animal, а потом от него Dog и Cat плодит. Красота, блядь!

class Animal {
  constructor(public name: string) {}
  move(distance: number) {
    console.log(`${this.name} moved ${distance}m`);
  }
}

А потом приходит хипстер с бородой и говорит: "Не, это всё хуйня, давай по-функциональному!" И начинается Функциональное программирование. Чистые функции, никаких побочных эффектов, всё иммутабельно. map, reduce, filter — святая троица, блядь. Написал const add = (a, b) => a + b и чувствуешь себя богом лямбда-исчислений, ёпта.

const add = (a: number, b: number): number => a + b;
const numbers = [1, 2, 3].map(x => x * 2);

А если ты консерватор и любишь по старинке — всегда пожалуйста, Процедурное программирование. Просто пишешь функции одну за другой, как в девяностых, и не паришься. Никаких тебе монад, просто последовательность действий, в рот меня чих-пых.

Но это ещё не всё! Захочешь асинхронщины и потоков — добро пожаловать в Реактивное программирование. Подключаешь RxJS и начинаешь Observable-ы строчить. Данные текут рекой, ты их преобразуешь, фильтруешь, объединяешь. Голова кругом, но зато мощно, блядь.

И вишенка на торте — Generic-программирование. Это когда ты пишешь код, который нихуя не знает о типах, но работает с любыми, ёперный театр! Создаёшь функцию identity, которая просто возвращает то, что получила, но с дженериками это выглядит как магия.

function identity<T>(arg: T): T {
  return arg;
}

Вот и получается, что TypeScript — это такая мартышлюшка универсальная. Хочешь — объекты создавай, хочешь — функциями кидайся, а хочешь — всё вместе смешай. Главное — типы не проеби, а то компилятор тебя так отхуярит, мало не покажется.