Exportera Typescript-interface från Angular-modul
Jag har ett Typescript-interface IBreadcrumbNavigation som jag exporterar. Jag kan använda det i en Angular-komponent med import { IBreadcrumbNavigation } from 'app/shared/interfaces/breadcrumbNavigation';
Men komponentens modul importerar redan ett SharedModule. Jag skulle vilja lägga IBreadcrumbNavigation-gränssnittet i SharedModule så att jag inte behöver importera det uttryckligen i varje komponent som vill använda det.
I min SharedModule har jag
import { IBreadcrumbNavigation } from './interfaces/breadcrumbNavigation';
@NgModule({
declarations: [
IBreadcrumbNavigation
],
exports: [
IBreadcrumbNavigation
]
})
export class SharedModule { };
TypeScript ger felet "'IBreadcrumbNavigation' refererar endast till en typ, men används som ett värde här."
Om jag ändrar IBreadcrumbNavigation från ett gränssnitt till en klass, försvinner felet.
Finns det en bra lösning på detta, eller behöver jag bara uttryckligen importera gränssnittet direkt till varje komponent?
Svar #1
Om det inte är en komponent, rör, direktiv, modul, importerar du bara gränssnittet i den modul som du vill. Gränssnittet måste exporteras
i './interfaces/breadcrumbNavigation';
export interface IBreadcrumbNavigation {
...
}
I x-komponenten från annan modul importerar du bara gränssnittet
import { IBreadcrumbNavigation } from 'pathToOtherModule/interfaces/breadcrumbNavigation';
Svar #2
Finns det en bra lösning på detta,
Som felmeddelandena säger, deklarerar gränssnitt egentligen ingenting som existerar vid körning. De finns enbart vid kompilering för TypeScript och tas bort. Så det är inte meningsfullt att lägga dem i en array för en dekoratör, eftersom dessa finns vid körning.
Det låter som att omvandling till en klass är det som skulle fixa det, men det är sannolikt att du borde exportera de konkreta implementeringarna av dessa gränssnitt.
Från dokumentationen:
Lägg till deklarerbara klasser — komponenter, direktiv och pipes — i en
declarations-lista.Deklarera dessa klasser i exakt en modul i applikationen. Deklarera dem i denna modul om de hör till denna modul.
Behöver jag bara uttryckligen importera gränssnittet direkt i varje komponent?
Du behöver verkligen göra detta - kom ihåg att NgModule inte automatiskt importerar andra ECMAScript/TypeScript-moduler åt dig. Utanför mallar måste du ta hand om detta själv.
