PassFront
  1. PassFront
  2. База знаний
  3. Типизация функций

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

Типизация функций

Функциональное программирование на TypeScript возможно, но язык не чисто функциональный: неизменяемость и чистота держатся на дисциплине, а не гарантируются языком, как в Haskell или Elm.

Что есть в TypeScript

  • функции первого класса, замыкания, стрелочные функции;
  • readonly, ReadonlyArray, as const — неизменяемость на уровне типов;
  • дискриминированные объединения вместо иерархий классов;
  • дженерики и вывод типов для композиции функций.
type Result<T> = { ok: true; value: T } | { ok: false; error: string };
const parse = (s: string): Result<number> =>
  Number.isNaN(Number(s)) ? { ok: false, error: 'Не число' } : { ok: true, value: Number(s) };

Чем отличается от функциональных языков

  • нет гарантии чистоты — функция может менять внешний мир;
  • readonly проверяется только компилятором, в рантайме объект можно изменить;
  • нет сопоставления с образцом (pattern matching) и каррирования в синтаксисе;
  • нет встроенных Option/Either — используют объединения или библиотеки (fp-ts, Effect);
  • рекурсия без оптимизации хвостовых вызовов.

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

В TS можно писать функционально (чистые функции, readonly, объединения), но язык не гарантирует чистоту и неизменяемость и не имеет pattern matching, как функциональные языки.

Подробнее: TypeScript — Functional programming concepts

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