Ответ
Subject - это простой Observable, который не хранит предыдущие значения. Подписчики получают только те значения, которые были отправлены после подписки.
const subject = new Subject<number>();
subject.next(1);
subject.subscribe(console.log); // Не получит 1
subject.next(2); // Выведет 2BehaviorSubject хранит последнее отправленное значение. Новые подписчики сразу получают это значение. Требует начального значения.
const behavior = new BehaviorSubject<number>(0);
behavior.next(1);
behavior.subscribe(console.log); // Выведет 1 сразу
behavior.next(2); // Выведет 2ReplaySubject хранит указанное количество предыдущих значений (буфер) и отправляет их новым подписчикам.
const replay = new ReplaySubject<number>(2);
replay.next(1);
replay.next(2);
replay.next(3);
replay.subscribe(console.log); // Выведет 2, 3 сразу