假设我们确实有一个类型为X
的对象,该对象实现了包含数字(例如Iterable
)的X extends Iterable<number>
接口。
我想编写一个函数,我们将其称为transformer
,它将能够产生类型为X
的新对象但是这次可以写为{{ 1}}。
一种简单的方法可能是这样的:
X extends Iterable<string>
但是这样做,我失去了X的信息:/
例如,如果我通过变压器:
const transformer = <X extends Iterable<number>(
x: Type,
): Iterable<string> => null // produce an Iterable of strings
我得到的是可迭代的,但是我将无法使用t的const t = transformer (new Set ([1, 2])) // transforme Set<number> to Iterable <string>
功能。
我该如何解决这个问题?我怎么能告诉编译器转换器的返回类型不是Set
而是(在那个例子中)Iterable<string>
?
Set<string>
我不能在returns类型中使用扩展-它们是解决我的问题的一种方法,而不必为每个可用的const transformer = <X extends Iterable<number>(
x: Type,
)/*: X extends Iterable<string>*/ => null // transforme source<number> to source <string>
都使转换器过载?
预先感谢