There are 2 reasons to allow setting compareWith to null/undefined.
1. Reverting the set compareWith - possible the user of the ng-select might want to remove the previously set compareWith to allow default behaviour in combination with bindValue possibly.
2. Extensibility - we have a wrapper around the ng-select that provides custom styles, adds error messages. Not all use cases use compareWith, but some do. Now it is impossible to redirect the [compareWith] @Input without setting the default. That hinders the bindValue default behaviour.