我一直不知道前端里面用了 strict TypeScript 之后这种 Runtime validator 有啥用。
因为 strict TypeScript 本身已经足够 sound,runtime error 无非来自于后端 API 返回的数据与类型定义不一致。
而这个问题来自两种原因:
1. 开发的时候和后端没沟通清楚,类型写错了,该 option 的没有 option,该 | null 的没有 | null 。
2. 沟通清楚了,后端没有按约定实现接口或者后端有莫名其妙的 bug 这个字段就是为空。
对于这两种问题的解决方案,第一种应该是改接口的类型描述而不是用所谓的安全版取值方法或 validate 方法取值。
第二种问题应该是通过日志监控报警,把犯罪证据留下第一时间发现问题并且把锅甩出去。
这种所谓的数据校验的 lib,徒增一大坨用来抽象数据的方法,解决不存在的问题。
如果是后端的问题让后端去改。如果是前端的接口类型定义错了应该把接口定义改对,这样 TypeScript 就能保护你不受空值问题的影响。
如果你没有日志监控报警那就去搭一个日志监控报警。