.基础抽象作为一个解析器(或者称为校验器), 我们可以将其类型表示为:interface Parser { parse: (i: I) => A;}这个类型用I表示解析器的输入, A表示解析器的输出..."解析器组合成"大"解析器, 所以不希望"大"解析器中的某一个"小解析器"的失败, 导致整个"大"解析器被终止.只有赋予解析器更灵活地处理异常的能力, 我们才能实现更加灵活的组合方式和错误日志的收集.此处可能有些抽象..., E, A[]>;从类型推断实现是函数式编程的经典做法, 我们不妨根据上述类型推断下fromArray的实现.fromArray的返回值是Parser, 与此同时我们有参数item...=> fab(a)));在函数式编程中, Functor, Monad, Applicative这样的类型构造器的类型约束称为type class, 而Promise这样的实现了某种type class....但实际上, io-ts真实的实现运用了更多的设计, 比如tag less final, 报错类型也使用了其他的代数数据类型(ADT)等, 覆盖面之广, 是仅仅一篇博客无法讲完的.有兴趣的读者推荐这篇教程