2014-09-02 44 views
6

Ich habe eine Klasse mit über 80 Methoden, und jede Methode akzeptiert ein Objekt mit einer definierten Schnittstelle.Erstellen eines Mixins von Schnittstellen in Typescript

class Stuff { 
    /* many more */ 
    getAccount(req: IAccount, callback: ICallback) { 
     return this._call('getAccount', req, callback); 
    } 

    getIds(req: IIDs, callback: ICallback) { 
     return this._call('getIds', req, callback); 
    } 
    /* many more */ 
} 

ziemlich ‚langweilig‘ stuff, da es nur die Abbildung auf die darunter liegende _call Verfahren und macht es für jede der Methoden sicher eingeben.

Aber manchmal diese req param Objekte werden aus 2-Schnittstellen oder mehr, und statt der Schaffung eine weitere Schnittstelle für jedes Mal, wenn es eine „peinliche“, wie dies aus:

export interface ILoled extends IAccount { 
    loled: boolean; 
} 

export interface IRofloled extends ILoled { 
    rofled: boolean; 
} 

class Stuff { 
    getLols(req: ILoled){ 
    } 

    getRofls(req: IRofloled){ 
    } 
} 

ist es eine Möglichkeit, ich kann nur als ein "Inline" -Mix von Interfaces innerhalb der Methodenparameterliste? wie (die Arbeit offenbar nicht wichtig):

class Stuff { 
    getMoreStuff(req: <{} extends IAccount, ITime>) { 
    } 
} 
+0

Ich fürchte, dass Sie eine Superschnittstelle erklären müssen. –

Antwort

8

Ja können Sie, as of Typescript 1.6. Called Kreuzungstypen, verwenden Sie den Operator &, um Typen zu kombinieren.

function extend<T, U>(first: T, second: U): T & U { 
    let result = <T & U> {}; 
    for (let id in first) { 
    result[id] = first[id]; 
    } 

    for (let id in second) { 
    if (!result.hasOwnProperty(id)) { 
     result[id] = second[id]; 
    } 
    } 
    return result; 
} 

var x = extend({ a: "hello" }, { b: 42 }); 
x.a; // works 
x.b; // works 
+1

Prost Mann genau das, was ich brauchte –

2

ist es eine Möglichkeit, es nur als „inline“ mixin von Schnittstellen Sie innerhalb der Methode Parameterliste

Nr setzen können kann nicht erweitern eine Schnittstelle inline

+1

Sieht aus wie _die Antwort _... –

Verwandte Themen