我正在尝试将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>;
}
答案 0 :(得分:1)
仅当泛型参数匹配模式
时才定义接口成员
没有。该成员将一直存在。