2016-06-03 16 views
0

Ich bin neu zu Typescript so Entschuldigungen, wenn dies eine einfache Frage ist.Typ Zusicherung für nicht exportierte Schnittstelle

Ich versuche eine Anwendung zu erstellen, die auf Electron (http://electron.atom.io/) ausgeführt wird. Ich habe die Typdeklarationen mit typings (https://github.com/typings/typings) hinzugefügt - mit den env: electron typings.

Das scheint in Ordnung zu sein. Ich kann jetzt Erklärungen von Typings nach Bedarf importieren.

Ich versuche jedoch, ein Anwendungsmenü für meine Anwendung zu erstellen. Die Methode, die ich verwenden möchte, ist ein "Vorlagen" -Objekt zu erstellen und die Menu.buildFromTemplate-Methode (http://electron.atom.io/docs/api/menu/) zu verwenden.

Das Problem, das ich bin vor, dass die Typdefinition für die Menu.buildFromTemplate angibt:

static buildFromTemplate(template: MenuItemOptions[]): Menu; 

und die MenuItemOptions Schnittstelle wird in der Definitionsdatei nicht exportiert.

Ich habe 2 Dinge ausprobiert:

const template = [ 
{ 
    label: 'Edit', 
    submenu: [ 
     { 
     label: 'Undo', 
     accelerator: 'CmdOrCtrl+Z', 
     role: 'undo' 
     }, 
     { 
     label: 'Redo', 
     accelerator: 'Shift+CmdOrCtrl+Z', 
     role: 'redo' 
    } 
    ] 
    } 
]; 

const menu = Menu.buildFromTemplate(template); 

Das gibt mir eine Fehlermeldung: "Argument des Typs‚{label: string; Untermenü: {label: string; Beschleuniger: string; Rolle: string;} [ ];} [] 'kann nicht dem Parameter' MenuItemOptions [] 'zugewiesen werden. "

Davon dachte ich, dass ich die Vorlage auf MenuItemOptions werfen muss. Ich kann jedoch MenuItemOptions nicht zum Import hinzufügen, da es nicht in der Definition exportiert wird.

Ist dies ein Fehler in der Definition. Sollen die MenuItemOptions auch exportiert werden? Oder mache ich etwas falsch.

Ich kann bei Bedarf vollständige Quelle zur Verfügung stellen.

+0

'Electron' ein global ist. Sie können die MenuItemOptions als const Vorlage aufrufen: Electron.MenuItemOptions [] = ... ' – cdbajorin

+0

Der Fehler, den ich bekomme, wenn Sie Ihren Code versuchen, ist: Typen der Eigenschaft 'Rolle' sind inkompatibel. Typ 'String' ist nicht zuweisbar tippe '' rückgängig machen '| "Wiederholen" | "schneiden" | "kopieren" | "einfügen" | "selectall" | "minimieren" | "schließen" | "ungefähr" | "verstecken ...". Typ 'string' ist nicht dem Typ '' services '' zuweisbar. – Ashley

+0

@cdbajorin - Ich muss zugeben, ich verstehe immer noch nicht die "globale" Sache in Typings. Ich habe die gelesen typings Dokumente, die versuchen zu erklären. Kennen Sie andere Materialien? FYI - es funktionierte dank. – user2294382

Antwort

1

Explizit eingeben template Werke für mich

const template : Electron.MenuItemOptions[] = [ 
{ 
    label: 'Edit', 
    submenu: [ 
     { 
     label: 'Undo', 
     accelerator: 'CmdOrCtrl+Z', 
     role: 'undo' 
     }, 
     { 
     label: 'Redo', 
     accelerator: 'Shift+CmdOrCtrl+Z', 
     role: 'redo' 
    } 
    ] 
    } 
]; 

const menu = Menu.buildFromTemplate(template); 

es, weil die role Eigenschaft zu sein scheint als Typ string registriert ist, die mit Typ nicht compatiable ist '"undo" | "redo" | "cut" | "copy" | "paste" | "selectall" | "minimize" | "close" | "about" | "hide...'