TypeScript类型参数实现多个接口

Mat*_*att 12 generics interface typescript typescript1.5

C#中,我可以这样做:

class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable { }
Run Code Online (Sandbox Code Playgroud)

TypeScript 1.5 beta中是否有一种方法可以在泛型类或函数中实现类型参数来实现多个接口,而无需为此创建全新的接口?

由于逗号含糊不清,显而易见的方法显然不起作用.

class Dictionary<TKey extends IComparable, IEnumerable, TValue> { }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,有趣的是,extends可以在泛型中完美地处理接口联合:

class Dictionary<TKey extends IComparable|IEnumerable, TValue> { }
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 22

交叉点类型现在从TS 1.6开始在这里,您可以在上面的例子中使用它:

class Dictionary<TKey extends IComparable & IEnumerable, TValue> { }
Run Code Online (Sandbox Code Playgroud)

  • @AlexG好的,我们在这里做了两件不同的事情.在这种情况下,我们说**类型**从其他类型扩展.*{a:number}和{a:string}*的交集类型显然与*{a:number&string}*相同,这里没什么奇怪的.但是,如果你在谈论类继承,那么我们当然会有冲突,但这在TS中永远不会发生,因为它没有多重继承. (3认同)
  • 哦,还有一些含糊之处.您不从接口继承,而是实现它们.并且一个类实现*{a:number}*和*{a:string}*都没有冲突,你只需要确保该类的成员a既是数字又是字符串(并且是交集类型*数字和字符串*). (2认同)

Her*_*lme 2

遗憾的是,在 TS1.5 中,唯一的方法是声明一个扩展 A 和 B 的新接口。

另一种选择是祈祷即将到来的支持交叉类型的TS1.6。