В чем разница между функциональным программированием на 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