, TypeScript 的类型基本上只存在于编译时.这是众多BUG 的源头, 想以下以下场景:后端的接口定义里将一个字段声明数组, 但实际上有的时候返回null, 前端没有对这个case 进行处理,...的类型一一对应的, 完备程度甚至可以称为TypeScript 的运行时类型检查.io-ts 使用的是组合子(combinator)作为抽象模型, 这与大部分validator generator有本质上的区别...尤其是在A和E使用同一种类型进行表示的时候, 会更加难以分辨和处理.对此, 我们将通过tagged union type进行抽象, 类型声明如下:interface Left { readonly...相比于Functor, 拥有更加"强大"的能力:对两个嵌套上下文进行合并, 即Promise> => Promise的转换在Monad的类型声明中, Monad还实现了Applicative...能够对一系列上下文进行串联并且收集其中的值.Monad在Applicative的基础上, 能够基于一个上下文中的值, 灵活地创建另外一个包裹在上下文中的值. -- stackoverflow上的回答在Promise.all