在打字稿中,我可以参数化“基本”通用类型吗?

时间:2020-03-12 20:42:11

标签: typescript

请考虑以下类型,该类型检查参数T是否与预期类型匹配,然后根据其推断的类型参数返回新类型:

type Match<T> = (T extends Expected<infer U> ? NewType<U> : never)

在这种情况下,我希望能够切换出Expected和NewType并重用此模式,假设它们将始终具有相同的形状,即单个类型参数的形状。

所以我的理想是:

type Expected<T> = {}
type NewType<T> = {}

type Match<T, E, N> = (T extends E<infer U> ? N<U> : {})

// Could be used like:
type Matcher<T> = Match<T, Expected, NewType>;

但这失败了,“类型E不是通用的”,与N相同。

我想知道是否有一种回旋的方式来实现这样的目标...?

这种模式和“基本”通用类型是否有合适的用语?

编辑: 评论确认HKT适用于这种情况。

我正在使用'fp-ts'(我很讨厌)-有人可以解释如何使用其HKT实现解决用例吗?该文档仅讨论函子... https://grossbart.github.io/fp-ts-recipes/#/hkt

0 个答案:

没有答案