2014-09-02 13 views
6

Ho una classe con oltre 80 metodi e ogni metodo accetta un oggetto contenente un'interfaccia definita.Creazione di una combinazione di interfacce 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 */ 
} 

abbastanza 'noioso' roba, dal momento che è solo la mappatura al metodo underlaying _call e rendendolo tipo sicuro per ciascuno dei metodi.

volte però questi req oggetti param sono costituiti da 2 interfacce o più, e invece di creare un'altra interfaccia per ogni volta che c'è un "imbarazzante", in questo modo:

export interface ILoled extends IAccount { 
    loled: boolean; 
} 

export interface IRofloled extends ILoled { 
    rofled: boolean; 
} 

class Stuff { 
    getLols(req: ILoled){ 
    } 

    getRofls(req: IRofloled){ 
    } 
} 

c'è alcun modo posso mettilo semplicemente come un mixin "in linea" di interfacce all'interno dell'elenco dei parametri del metodo? come (che ovviamente non funzionano):

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

Ho paura che devi dichiarare una super-interfaccia. –

risposta

8

Sì, è possibile, as of Typescript 1.6. Chiamato Tipi di intersezione, utilizzare l'operatore & per combinare i tipi.

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

Cheers man esattamente quello di cui avevo bisogno –

2

C'è un modo che posso solo mettere come un mixin "in linea" delle interfacce all'interno della lista parametro del metodo

No. impossibile estendere un'interfaccia in linea

+1

Sembra _ la risposta _... –

Problemi correlati