PassFront
  1. PassFront
  2. База знаний
  3. Основы TypeScript

В чем разница между паттернами в TypeScript и в других языках?

Основы TypeScript

Паттерны проектирования в TypeScript те же, что и в других языках, но реализуются по-другому из-за структурной типизации и того, что типы стираются при компиляции.

Отличия

  • Структурная типизация. Тип совместим, если у него подходящая форма, а не потому что он явно реализует интерфейс. Многие паттерны (стратегия, адаптер) сводятся к объекту с нужными функциями, без иерархии классов.
  • Функции первого класса. Стратегию, команду, наблюдателя часто описывают функциями, а не классами.
type Strategy = (price: number) => number;
const discount: Strategy = (p) => p * 0.9;
function checkout(price: number, apply: Strategy) {
  return apply(price);
}
  • Нет рантайм-типов. Нельзя выбрать реализацию по типу — нужен дискриминант (kind: 'circle') или type guard.
  • Модули вместо синглтонов. Модуль ES уже единственный экземпляр.
  • Дискриминированные объединения часто заменяют паттерн «посетитель» и наследование.

Коротко для собеседования

Паттерны те же, но TypeScript — структурный и мультипарадигменный: многое делают функциями, объединениями и модулями вместо иерархий классов; типов в рантайме нет.

Подробнее: Refactoring.Guru — паттерны на TypeScript

Другие вопросы раздела