Что такое InjectionToken

Ответ

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') и молился, чтобы они нигде не пересеклись, то теперь забудь. Это как перейти с самопальных гвоздей на нормальные болты с шестигранной головкой. Надёжнее, безопаснее, и в рот меня чих-пых — ещё и с типами дружит.