setTimeout is basically a javascript feature used to run a block of code after a specified span of time.
example :- setTimeout(console.log('hello'),1000);
debounce and debounceTime are basically rxjs operators. They hold the data emitted by an observable for a specified span of time and after that send it to the subscriber. And in between if the observable emits a new value then it discards the previous value and would emit the new value after the specfied period of time.