打字稿像返回类型一样扩展-如何操作?

时间:2018-11-09 15:22:23

标签: typescript

假设我们确实有一个类型为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> 都使转换器过载?

预先感谢

0 个答案:

没有答案