2013-07-25 31 views
12

Próbuję znaleźć wzór do łączenia wielu interfejsów w jedną klasę abstrakcji. Obecnie mogę łączyć wiele interfejsów za pomocą "narzędzi", ale interfejs nie może zadeklarować konstruktora. Kiedy muszę wprowadzić konstruktora, zmuszony jestem użyć klasy abstrakcyjnej. Kiedy używam klasy abstrakcyjnej, muszę ponownie zadeklarować cały interfejs złożony! Z pewnością coś mi brakuje?Obejścia wielokrotnego dziedziczenia maszynopisu?

interface ILayerInfo { 
    a: string; 
} 

interface ILayerStatic { 
    b(): string; 
} 

class Layer implements ILayerInfo, ILayerStatic { 
    constructor(info: ILayerInfo); 
    a: string; 
    b(): string; 
} 

ODPOWIEDŹ: wykorzystanie „nowy”:

interface Layer extends ILayerInfo, ILayerStatic { 
    new(info: ILayerInfo); 
} 

// usage: new Layer({ a: "" }); 

Odpowiedz

21

Deklarowanie konstruktora na tym samym interfejsie co członkowie instancji naprawdę nie ma większego sensu - jeśli masz zamiar przekazać w typ dynamicznie używany w konstruktorze, to strona statyczna klasy, która byłaby ograniczona. Co byś chciał zrobić, to prawdopodobnie coś takiego:

interface Colorable { 
    colorize(c: string): void; 
} 

interface Countable { 
    count: number; 
} 

interface ColorCountable extends Colorable, Countable { 
} 

interface ColorCountableCreator { 
    new(info: {color: string; count: number}): ColorCountable; 
} 

class ColorCounted implements ColorCountable { 
    count: number; 
    colorize(s: string) { } 
    constructor(info: {color: string; count: number}) { 
     // ... 
    } 
} 

function makeThings(c: ColorCountableCreator) { 
    var results: ColorCountable[]; 
    for(var i = 0; i < 10; i++) { 
     results.push(new c({color: 'blue', count: i})); 
    } 
    return results; 
} 

var items = makeThings(ColorCounted); 
console.log(items[0].count); 

Zobacz również How does typescript interfaces with construct signatures work?

+0

To „nowe” słowo kluczowe w interfejsie, że mi brakuje! W ogóle nie chciałem klasy. Dzięki "nowemu" mogę trzymać się interfejsów. –

Powiązane problemy