Ответ
InjectionToken — это механизм в Angular для создания уникальных токенов, которые можно использовать в DI (Dependency Injection). Позволяет безопасно инжектировать значения, которые не являются классами (примитивы, объекты, функции).
Пример:
import { InjectionToken } from '@angular/core';
export const API_URL = new InjectionToken<string>('API endpoint URL');
// В модуле:
providers: [
{ provide: API_URL, useValue: 'https://api.example.com' }
]
// В компоненте:
constructor(@Inject(API_URL) private apiUrl: string) {}
Ключевые особенности:
- Гарантирует уникальность токена
- Позволяет типизировать инжектируемое значение
- Описание токена (строковый параметр) помогает при дебаге
- Альтернатива строковым токенам (которые небезопасны)
Ответ 18+ 🔞
Слушай, а вот есть в Angular такая штука — InjectionToken. Ну, это типа как ключ для DI, только не простой, а с защитой от дурака, понимаешь? Чтобы не путать, блядь, одни строки с другими, как это бывает с этими ебучими строковыми токенами.
Представь: тебе надо впихнуть в компонент не класс, а какую-нибудь хуйню — строку, объект конфига, функцию какую-нибудь. Ну, не класс же под это плодить, правда? Вот для этого он и нужен.
Создаёшь ты этот токен, и он, сука, уникальный. Как отпечаток пальца, блядь. Два одинаковых не сделаешь, даже если очень захотеть. И главное — его можно типизировать! То есть ты заранее говоришь: «Слушай, Angular, я сюда буду совать только строки, так что не вздумай мне какую-нибудь хуйню подсунуть». И он слушается.
Вот смотри, как это выглядит в коде, тут всё чётко:
import { InjectionToken } from '@angular/core';
export const API_URL = new InjectionToken<string>('API endpoint URL');
// В модуле:
providers: [
{ provide: API_URL, useValue: 'https://api.example.com' }
]
// В компоненте:
constructor(@Inject(API_URL) private apiUrl: string) {}
Видишь? Создали токен API_URL, сказали, что он для строк. В провайдерах привязали к нему конкретный URL. А в компоненте просто говорим: «Дайте-ка сюда, что у вас по этому токену лежит». И всё, пиздец, работает. Никаких конфликтов, потому что токен — он уникальный, ёпта.
А ещё, смотри какая фишка — вторым параметром туда строку описательную можно передать. Типа 'API endpoint URL'. Это на случай, если всё полетит к чертям и в ошибках будет не «InjectionToken», а понятное описание, что именно сломалось. Удобно же, блядь!
Короче, если раньше ты использовал магические строки в @Inject('my_token') и молился, чтобы они нигде не пересеклись, то теперь забудь. Это как перейти с самопальных гвоздей на нормальные болты с шестигранной головкой. Надёжнее, безопаснее, и в рот меня чих-пых — ещё и с типами дружит.