Интересует @Injectable()
Эта штука называется "декоратор".
Декоратор - это по сути просто функция, которая принимает на вход другую функцию или класс или метод класса или свойство класса и может его подменить или модифицировать.
То есть Injectable - это просто функция, которая возвращает другую функцию, в которую передается ссылка на класс A, и она может сделать с ним что угодно. Например в данном случае она просто запоминает этот класс в DI контейнере.
Надо учитывать, что декораторы являются экспериментальной фичей TypeScript, их нужно включить в tsconfig, а так же никто не гарантирует, что декораторы всегда будут работать так как работают сейчас, тем более декораторы из TypeScript конфликтуют с декораторами из пропозала в ECMAScript (стандарт JS).
Подробнее про декораторы можно почитать тут:
https://www.typescriptlang.org/docs/handbook/decor...
Ну а про устройство Dependency Injection лучше нагуглить какую-либо статью и почитать, ибо в рамках ответа не распишешь всех тонкостей.
Но если вкратце, нам нужен некоторый контейнер, в котором мы отобразим все injectable сущности и их зависимости, а в последствии сможем их оттуда извлекать по запросу, в идеале по типу данных (хотя в TS с этим туго, ибо типы живут только в compiletime), но можно и по классу (которые в TS представлены и типом и runtime значением).