valueChanges is an Observable so you can pipe pairwise to get the previous and next values in the subscription.
// No initial value. Will emit only after second character entered
this.form.get('fieldName')
.valueChanges
.pipe(pairwise())
.subscribe(([prev, next]: [any, any]) => ... );
// Fill buffer with initial value, and it will emit immediately on value change
this.form.get('fieldName')
.valueChanges
.pipe(startWith(null), pairwise())
.subscribe(([prev, next]: [any, any]) => ... );
Example of it working in StackBlitz:
https://stackblitz.com/edit/angular-reactive-forms-vhtxua
Update
If you’re noticing that startWith appears to be deprecated this is not the case. There is only a single active signature for the operator, which you can read about in this answer.
Highly likely, you are using startWith(null) or startWith(undefined), they are not deprecated despite the notice, but IDE detects a wrong function signature, which is deprecated, and shows the warning.
A simple work around is providing the return type that would be expected:
// Prevent deprecation notice when using `startWith` since it has not been deprecated
this.form.get('fieldName')
.valueChanges
.pipe(startWith(null as string), pairwise())
.subscribe(([prev, next]: [any, any]) => ... );
Example of it working in StackBlitz with startWith:
https://stackblitz.com/edit/angular-reactive-forms-rvxiua