2016-05-05 9 views
0

Hier ist eine einfache Schnittstelle in Modul definiert wird unter Verwendung einer Datei:Typoskript Schnittstelle in einem anderen Modul-Datei

interface IDirectoryLink 
{ 
    link_title: string 
    link_desc: string 
} 

Und hier ist die Klasse in Modul A-Datei:

class DirectoryModel implements IDirectoryLink 
{ 

    public link_title: string 
    public link_desc: string 

    constructor(fields: Object) 
    { 
     // Loops to populate class properties with fields values 
     _.forOwn(fields, (value, key) => // Needs fat arrow to bind 'this' 
     { 
      if (value) { this[key] = value } 
     }) 
    } 
} 

später auf der Datei, I instanziieren die Klasse:

let directoryModel: IDirectoryLink = new DirectoryModel(fields) 

und dann noch im Modul A, die Instanz an eine Funktion, die für die Validierung in Modul B ist :

let val = validation.modelValidator(directoryModel) 

In Modul B-Datei ist hier der obere Teil der Funktion, die die Modellinstanz übergeben wird einige Arbeit auf, es zu tun:

export let modelValidator = function (directoryModel: IDirectoryLink) // cannot find name IDirectoryLink 
{ 
//code 
} 

Ich hatte gehofft, dass die Instanz als "bestanden directoryModel 'wäre vom Typ IDirectoryLink. Aber es ist nicht, es ist vom Typ "any" und wenn ich ': IDirectoryLink' wie im obigen Code hinzufüge, wird 'Name nicht IDirectoryLink' gefunden.

Wie kann die übergebene Instanz als IDirectoryLink-Typ in Modul B-Datei erkannt werden? Sollte ich das gesamte Modul A in B importieren, das exportierte Schnittstelle enthalten würde?

Antwort

0

Das Problem ist, dass es in Ihrer anderen Datei nicht über den Typ "IDirectoryLink" weiß. Sie müssen diesen Typ importieren.

Das bedeutet entweder, dass Sie mehrere Dinge aus Modul A (der Schnittstellentyp und die Implementierung) exportieren müssen oder zwei Module haben müssen, eines mit Ihrer Schnittstelle (importiert von Modul B) und eines mit Ihrer Implementierung.

Verwandte Themen