2017-06-29 6 views
0

Ich habe eine Typoskript-Schnittstelle IBreadcrumbNavigation Ich exportiere. Ich kann es in einer eckigen Komponente mit import { IBreadcrumbNavigation } from 'app/shared/interfaces/breadcrumbNavigation';Export Typescript Schnittstelle von eckigen Modul

verwenden. Das Modul der Komponente importiert jedoch bereits SharedModule. Ich möchte die IBreadcrumbNavigation Schnittstelle in die SharedModule setzen, so dass ich es nicht explizit in jede Komponente importieren muss, die es verwenden möchte.

In meinem SharedModule habe ich

import { IBreadcrumbNavigation } from './interfaces/breadcrumbNavigation'; 

@NgModule({ 
    declarations: [ 
     IBreadcrumbNavigation 
    ], 
    exports: [ 
     IBreadcrumbNavigation 
    ] 
}) 
export class SharedModule { }; 

Typoskript gibt die Fehlermeldung anzeigt „‚IBreadcrumbNavigation‘bezieht sich nur auf eine Art, sondern als Wert verwendet, hier wird.“

Wenn ich IBreadcrumbNavigation von einer Schnittstelle zu einer Klasse ändern, verschwindet der Fehler.

Gibt es eine gute Lösung, oder muss ich nur die Schnittstelle direkt in jede Komponente importieren?

+0

können wir Modul finden Sie in der Komponente importieren –

Antwort

1

Gibt es eine gute Lösung, um diese,

Wie die Fehlermeldungen sagen, Schnittstellen erklären nicht wirklich alles, was zur Laufzeit vorhanden ist. Sie existieren nur zur Kompilierzeit für TypeScript und werden gelöscht. Es macht also keinen Sinn, sie in ein Array für einen Dekorator zu legen, da diese zur Laufzeit existieren.

Es klingt wie die Konvertierung in eine Klasse ist, was würde es beheben, aber es ist wahrscheinlich, dass Sie die konkreten Implementierer dieser Schnittstellen exportieren sollten.

From the docs:

hinzufügen declarableKlassen - Komponenten, Richtlinien und Rohre - auf eine declarations Liste.

Deklarieren Sie diese Klassen in genau ein Modul der Anwendung. Deklarieren Sie sie in dieses Modul, wenn sie zu diesem Modul gehören.


muss ich nur ausdrücklich direkt in jede Komponente die Schnittstelle importieren?

Sie müssen dies tun - beachten Sie, dass NgModule nicht automatisch andere ECMAScript/TypeScript-Module für Sie importiert. Außerhalb von Vorlagen müssen Sie sich selbst darum kümmern.

2

Wenn es sich nicht um eine Komponente, eine Pipe, eine Direktive oder ein Modul handelt, importieren Sie nur die Schnittstelle in das gewünschte Modul. Die Schnittstelle muss

in 'exportiert werden./ interfaces/breadcrumbNavigation ';

export interface IBreadcrumbNavigation { 
    ... 
} 

In x-Komponente von anderen Modul, das Sie nur die Schnittstelle

import { IBreadcrumbNavigation } from 'pathToOtherModule/interfaces/breadcrumbNavigation';