仅当泛型参数与模式匹配时才定义接口成员

时间:2016-02-24 22:36:35

标签: typescript

我正在尝试将TypeScript输入添加到my (non-TypeScript) library。我有一个在用户定义的类型上是通用的接口类型Iter<T>,并定义了几个方法,除了flatten之外,它们都很好用:

interface Iter<T> extends Iterable<T> {
    map<U>(transform: Transform<T, U>): Iter<U>;
    filter(predicate: Predicate<T>): Iter<T>;
    ...
    flatten(): Iter<any>; // ?
}

flatten的语义是它在Iter<Iterable<U>>类型的某个类型上运行,并将它们展平为Iter<U>。在.NET术语中,它与SelectMany(x => x)相同;用Python术语来说,它就像itertools'chain

问题是:有没有办法为flatten提供更具体的回复类型?或者,等效地,当接口的泛型参数与某个约束匹配时,有没有办法只在接口上定义方法?

类似(假设语法):

interface Iter<T> extends Iterable<T> {
  ...
  flatten<U>(): Iter<U> when T : Iterable<U>;
}

interface Iter<Iterable<U>> extends Iter<T> {
  flatten(): Iter<U>;
}

1 个答案:

答案 0 :(得分:1)

  

仅当泛型参数匹配模式

时才定义接口成员

没有。该成员将一直存在。