Kontextobjekte struktureller Direktiven sind in Angular standardmäßig ungetypt, sodass Template-Autoren keine Kompilierzeit-Rückmeldung erhalten, wenn sie eine Kontextvariable wie `let-idx="indx"` falsch schreiben. Die statische Methode `ngTemplateContextGuard` ist ein Compiler-Hook, nach dem Angulars Template-Type-Checker gezielt sucht: Sie erlaubt einer generischen Direktive, die Form ihres Kontextobjekts zu behaupten, damit der Template-Compiler `let-`-Bindings gegen das echte Interface einschränkt und prüft. Ohne diesen Guard fällt der Ivy-Template-Checker für den Kontext auf `any` zurück und akzeptiert stillschweigend fehlerhafte Bindings, die erst zur Laufzeit tief in einer Schleife mit „undefined is not a function" scheitern.
import { Directive, TemplateRef, Input } from '@angular/core';export interface RowContext<T> {$implicit: T;index: number;isLast: boolean;}@Directive({selector: '[appRow]',standalone: true,})export class RowDirective<T> {@Input('appRow') data!: T;constructor(public template: TemplateRef<RowContext<T>>) {}static ngTemplateContextGuard<T>(dir: RowDirective<T>,ctx: unknown): ctx is RowContext<T> {return true;}}// usage in host component template:// <ng-container *ngFor="let item of items; let i = index; let last = last">// <ng-template [appRow]="item" let-row let-idx="index" let-isLast="isLast">// {{ row.name }} - {{ idx }} - {{ isLast }}// </ng-template>// </ng-container>