2017-05-08 8 views
0

ich eine Schnittstelle Klasse zu schreiben versuchen, die auch andere Klassen enthalten, aber ich bin immer einen Fehler, wenn ich so tun, aber nicht sicher, was falsch ist:Schnittstelle Klasse mit verschachtelten Klassen in Typoskript

Schnittstelle:

export interface Languages{ 
    static English = class{ 
     id: number, 
     section:number, 
     name: string 
    }, 
    static Chinese = class{ 
     id: number, 
     section: number, 
     name: string 
    } 
} 

Beide static und English zeigen Fehler besagt: [ts] Property or signature expected. [ts] Cannot find name 'English'.

+2

In einer Schnittstelle gibt es kein 'static'. Eine Schnittstelle beschreibt, wie die Instanz aussieht. Wenn Sie statische Member/Methoden beschreiben möchten, müssen Sie eine andere Schnittstelle erstellen, um diese darzustellen, wie Sie es mit [Array] (https://github.com/Microsoft/TypeScript/blob/master/lib/lib.d) getan haben. ts # L1111) und [ArrayConstructor] (https://github.com/Microsoft/TypeScript/blob/master/lib/lib.d.ts#L1294) zum Beispiel –

Antwort

1

Interfaces ist ein Vertrag, keine Umsetzung. Ihre English und Chinese Mitglieder sind Instanzen, die genau das ist, was eine Schnittstelle nicht unterstützen kann. Sie sind auch statisch, was auch an einer Schnittstelle nicht stimmt. Man könnte es so Refactoring:

export interface Languages{ 
    English: Language; 
    Chinese: Language; 
} 

export interface Language { 
    id: number; 
    section:number; 
    name: string; 
} 

Ein besseres Design wäre ein Wörterbuch oder eine Liste mit einer Suche verwendet werden, besonders wenn diese eine nicht-feste Größe Liste ist, wo Sprachen später hinzugefügt werden. So etwas zum Beispiel:

export interface Languages{ 
    getLanguageByCode(isoCode:string): Language; 
    getLanguageById(id: number): Language; 
    allLanguages: Language[]; 
} 
Verwandte Themen