Аттила Чаньи, у вас есть (потенциально) большая проблема, чем описанная в этой статье.

Скажем, для примера, родительский компонент использует субъект (на самом деле не имеет значения, какой субъект) в качестве наблюдаемого источника, который будет передан с помощью Input дочернему MyComponent и он выдаст только одно значение, как показано ниже:

@Component({
  ...
  template: `<my-component [words$]="src$"></my-component>`
  ...
})
export class ParentComponent implements OnInit {
  private _src = new Subject<string>();
  src$ = this._src.asObservable();
  ngOnInit() {
    /*
     * illustrates some business logic
     * which will happen in future
    */
    setTimeout(() => {
      this._src.next("some value");
    }, 3000);
  }
}

Через некоторое время вызывается функция ngOnDestroy MyComponent, которая устанавливает для isAlive значение false.

ngOnDestroy(){
    this.isAlive = false;
}

Теперь, если src$ компонента ParentComponent больше не будет выдавать значения, вы получите утечку памяти прямо здесь! (Предикат takeWhile никогда не будет оцениваться).

**если вы, конечно, не используете async-pipe, который будет обрабатывать подписку за вас. Но в случае с async-pipe это также означает, что оператор takeWhile(() =›this.isAlive) не имеет смысла, поскольку канал порвется. вниз по течению.