这篇文章的作者写的fp-ts
很好,结合TypeScript的联合类型的文档说明了。
_A
是我们 HKT: 中值的类型HKT<"Option", string> => Option<string>
。我们稍后会看到映射是如何工作的。
_URI
是 HKT 的标识符,例如Option.ts。它有 2 个实例,None
和Some
,这两个实例"Option"
都有_URI
.
看一下 in 的用法,F
我们Foldable
可以看到它与;Type
一起用于类型中。. 假设如此,这与 非常相似。目前,我们不能将泛型类型传递给另一个泛型,因为它是泛型参数:不会编译,这是主要问题。A
Type<F, A>
F == "Option" & A == string
Type<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 个泛型参数来取回包装在更高种类类型中的值类型,从而解决前面提到的泛型问题。