2015-07-18 11 views
9

In C#, posso fare questo:dattiloscritto per implementare interfacce multiple

class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable { } 

C'è un modo in dattiloscritto 1.5 beta per un parametro di tipo in una classe o una funzione generica per implementare più interfacce, senza creare un'interfaccia completamente nuova per lo scopo?

Ovviamente il modo ovvio non funziona a causa dell'ambiguità delle virgole.

class Dictionary<TKey extends IComparable, IEnumerable, TValue> { } 

A proposito, strano a dirsi, extends in grado di gestire le unioni di interfaccia perfettamente bene in farmaci generici:

class Dictionary<TKey extends IComparable|IEnumerable, TValue> { } 

risposta

1

Nel TS1.5, l'unico modo che si può fare è dichiarare una nuova interfaccia che si estende A e B, purtroppo.

Un'altra alternativa è pregare per il prossimo TS1.6 in cui è supportato intersection type.

+0

Wow, ho pensato tipi intersezione sarà alla fine una cosa, ma non sapevo che erano in viaggio . Grazie per la risposta. – Matt

13

Intersection types ora sono qui dal TS 1.6 e si può usare in questo modo nel precedente esempio:

class Dictionary<TKey extends IComparable & IEnumerable, TValue> { } 
+0

Questo non è esattamente lo stesso di estendere entrambe le interfacce. Funziona in questi casi semplici, tuttavia, in cui le interfacce non si sovrappongono. – AlexG

+0

@AlexG Cosa intendi? Perché le interfacce sovrapposte potrebbero essere un problema? – Alex

+0

Con {a: number} e {a: string} il tipo risultante sarebbe silenziosamente uguale a {a: number & string} Che non è lo stesso che eredita da due interfacce distinte, dove una proprietà in conflitto genera un errore. – AlexG

Problemi correlati