The question when writing a constructor is what you are allowed to type-hint for, and the answer is in the compiled container rather than in any documentation.
$ bin/console debug:autowiring logger
PsrLogLoggerInterface (monolog.logger)
$ bin/console debug:autowiring --all http
SymfonyContractsHttpClientHttpClientInterface (http_client)
SymfonyComponentHttpFoundationRequestStack (request_stack)
$ bin/console debug:container --parameters | grep database
It reads the compiled container, so it reflects what will actually run rather than what the configuration appears to say — which matters when a bundle registers something conditionally. The --all flag includes services with no alias, which is the longer and occasionally necessary list. Pairing it with lint:container in CI is what turns a wrong type hint into a build failure rather than a request failure.