泛型类没有泛型函数中的类型参数
问题描述:
Typescript中是否有任何方式捕获不带类型参数的泛型类?我基本上是试图使像泛型类没有泛型函数中的类型参数
interface Collection<T> {
...
}
function map<T, U, V extends Collection>(collection:V<T>, fn:(e:T) => U):V<U> {
....
}
在集合类工作在我的程序过程风格的地图功能,但因为编译器希望我把一个类型参数的集合在地图中的通用这不起作用名单。
本质上我想要类型检查器知道如果我在List<T>
上调用它,我会得到一个List<U>
;称之为Set<T>
,我得到Set<U>
;这可能吗?
感谢
答
这是我对这个...
function map<T, U, V extends Collection<any>>(collection: V, fn:(e:T) => U) : Collection<U> {
return null;
}
妥协之一:V extends Collection<any>
不能重复使用型T
。理想情况下,您会使用T
而不是any
。
妥协二:我们从函数返回不太具体的Collection<U>
。理想情况下,您接受一般类型并返回一个特定的类型,因此这是一个妥协。
没有妥协的版本。你需要一个在类型和输出类型,你需要一个通用类,所以你可以在方法类型参数内重复使用类类型:
class Mapper<T, U> {
map<TIn extends Collection<T>, TOut extends Collection<U>>(collection: TIn, fn:(e:T) => U) : TOut {
return null;
}
}
Currerntly我使用'函数映射(收集:收集 ,fn:(e:T)=> U):Collection {...}'',它以与第一个选项相同的类型信息结束,同时强制该集合由函数可以接受的类型组成,但我希望能让它更具体。与第二种选择相同,除了我需要在实例化Mapper时手动提供T和U类型,否则几乎所有类型的信息都会丢失。 –