В чем разница между Subject, BehaviorSubject и ReplaySubject

Ответ

Subject - это простой Observable, который не хранит предыдущие значения. Подписчики получают только те значения, которые были отправлены после подписки.

const subject = new Subject<number>();
subject.next(1);
subject.subscribe(console.log); // Не получит 1
subject.next(2); // Выведет 2

BehaviorSubject хранит последнее отправленное значение. Новые подписчики сразу получают это значение. Требует начального значения.

const behavior = new BehaviorSubject<number>(0);
behavior.next(1);
behavior.subscribe(console.log); // Выведет 1 сразу
behavior.next(2); // Выведет 2

ReplaySubject хранит указанное количество предыдущих значений (буфер) и отправляет их новым подписчикам.

const replay = new ReplaySubject<number>(2);
replay.next(1);
replay.next(2);
replay.next(3);
replay.subscribe(console.log); // Выведет 2, 3 сразу