这篇文章的作者写的fp-ts很好,结合TypeScript的联合类型的文档说明了。
_A是我们 HKT: 中值的类型HKT<"Option", string> => Option<string>。我们稍后会看到映射是如何工作的。
_URI是 HKT 的标识符,例如Option.ts。它有 2 个实例,None和Some,这两个实例"Option"都有_URI.
看一下 in 的用法,F我们Foldable可以看到它与;Type一起用于类型中。. 假设如此,这与 非常相似。目前,我们不能将泛型类型传递给另一个泛型,因为它是泛型参数:不会编译,这是主要问题。AType<F, A>F == "Option" & A == stringType<F, A> == Type<"Option", string>Option<string><F,A>(fa: F<A>)
为了实现Type<"Option", string> => Option<string>,有几个“映射”接口(这在文章中有解释)。我们可以在Option 这里看到这个:
declare module './HKT' {
interface URI2HKT<A> {
Option: Option<A>
}
}
最左边Option是字符串键,最右边是实际Option类型,这毕竟是一个普通的记录界面。让我们快速看一下 : 的Type定义type Type<URI extends URIS, A> = URI2HKT<A>[URI]。
URI2HKIT是从我们"Option"到我们实际的地图Option。它允许传递 2 个泛型参数来取回包装在更高种类类型中的值类型,从而解决前面提到的泛型问题。