0 Tage Serie
javascript / intermediate
Snippet

Abstrakte Klassen-Polymorphie über Angular InjectionToken-Provider

Abstrakte TypeScript-Klassen definieren polymorphe Verträge ohne Laufzeit-Overhead. Durch die Verknüpfung einer abstrakten Basisklasse mit einem Angular InjectionToken und einer Standard-Factory können Konsumenten die abstrakte Schnittstelle direkt injizieren, wodurch Laufzeit-Implementierungen flexibel zwischen Modulen oder Test-Suites ausgetauscht werden können.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { Injectable, InjectionToken } from '@angular/core';
export abstract class BaseNotifier {
abstract sendAlert(message: string): void;
}
@Injectable()
export class ToastNotifier extends BaseNotifier {
sendAlert(message: string): void {
console.warn(`[TOAST]: ${message}`);
}
}
export const NOTIFIER_TOKEN = new InjectionToken<BaseNotifier>('NOTIFIER_TOKEN', {
providedIn: 'root',
factory: () => new ToastNotifier()
});
angular
Erklärung
1
export abstract class BaseNotifier { abstract sendAlert(message: string): void; }
Deklariert die abstrakte Klasse, welche die erforderlichen Methodensignaturen für abgeleitete Klassen festlegt.
2
export const NOTIFIER_TOKEN = new InjectionToken<BaseNotifier>('NOTIFIER_TOKEN', {
Erstellt ein typsicheres InjectionToken mit einer Standardimplementierung auf Root-Ebene.