Ein `InjectionToken<T>` trägt seinen Typparameter vollständig durch `inject()` hindurch, sodass `useFeatureFlags()` ein voll typisiertes `FeatureFlags`-Objekt zurückgibt, ohne dass in der Kette irgendwo gecastet werden muss. Die Option `factory` lässt das Token selbst einen Standardwert liefern, falls sonst niemand einen bereitstellt, und weil diese Factory selbst `inject(RAW_CONFIG, { optional: true })` aufruft, kann das Token von einem weiteren optionalen Token abhängen, ohne jeden Konsumenten zu zwingen, beide zu konfigurieren. Dieses Muster — ein typisiertes Token, dessen Factory weitere optionale Tokens komponiert — ersetzt das klassische Konstruktor-Boilerplate mit `@Optional() @Inject(TOKEN)` durch einen einzigen Deklarationspunkt, der unter Strict Mode typsicher bleibt.
import { InjectionToken, inject } from '@angular/core';interface FeatureFlags {readonly darkMode: boolean;readonly betaCheckout: boolean;}const RAW_CONFIG = new InjectionToken<Partial<FeatureFlags>>('RAW_CONFIG');const FEATURE_FLAGS = new InjectionToken<FeatureFlags>('FEATURE_FLAGS', {providedIn: 'root',factory: () => {const raw = inject(RAW_CONFIG, { optional: true });return {darkMode: raw?.darkMode ?? false,betaCheckout: raw?.betaCheckout ?? false,};},});function useFeatureFlags(): FeatureFlags {return inject(FEATURE_FLAGS);}