angular - At videregive typer som værdier i typescript
Jeg vil videregive interfaces som værdier til et konfigurationsobjekt:
export interface RouterConfig {
startEvents?: typeof RouterEvent[];
completeEvents?: typeof RouterEvent[];
}
Brugen bør være som:
private config: RouterConfig = {
startEvents: [NavigationStart],
completeEvents: [NavigationEnd, NavigationCancel, NavigationError]
};
Men det giver en fejl:
Typer af egenskaben 'completeEvents' er inkompatible. Type '(typeof NavigationEnd | typeof NavigationCancel | typeof NavigationError)[]' kan ikke tildeles typen 'RouterEvent[]'. Type 'typeof NavigationEnd | typeof NavigationCancel | typeof NavigationError' kan ikke tildeles typen 'RouterEvent'. Type 'typeof NavigationEnd' kan ikke tildeles typen 'RouterEvent'. Egenskaben 'id' mangler i typen 'typeof NavigationEnd'.
Hvordan kan jeg fikse det?
Her er en stackblitz-reproduktion
Bemærk, at RouterEvent er en klasse
Svar #1
Klasserne NavigationEnd, NavigationCancel, NavigationError har alle konstruktører med argumenter. Typen RouterEvent har en konstruktør uden argumenter. Det er derfor, tildelingen fejler. Hvis du vil bruge en konstruktør med et vilkårligt antal argumenter, skal du bruge en konstruktørsignatur, der afspejler dette, for eksempel vil dette virke new (...args: any[]) => RouterEvent. Angular definerer allerede en typealias for denne konstruktør i form af Type-typen. Så vi kan skrive det på denne måde:
import { Component, Type } from '@angular/core';
import { RouterEvent, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
export interface RouterConfig {
startEvents?: Type<RouterEvent>[];
completeEvents?: Type<RouterEvent>[];
}
let config: RouterConfig = {
startEvents: [NavigationStart],
completeEvents: [NavigationEnd, NavigationCancel, NavigationError]
};
