请考虑以下类型,该类型检查参数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