Why not just cast the subject to an observable?
private subject = new Subject<string>(); public subject$ = subject.asObservable();
In this way both pipe and subscribe are available without access to the underlying subject.
pipe
subscribe