进入GitHub主页
使用文档html
HelloType是一个api设计简单的js运行时的数据类型检查工具,它能够帮助你的js程序在使用某个(组)变量前,对变量的数据类型进行检查,防止在使用变量进行运算时因为数据类型不一样致使报错。前端
虽然咱们已经有typescript,可是它只能在编译时进行静态数据类型检查,而不能进行动态的运行时数据检查。而HelloType就是想补充这个空缺。它的使用方法很是简单,api设计很是容易理解,而且语义化。git
前端经过读取后端接口返回的数据进行界面渲染,可是常常碰到的问题是,前端对后端数据无比信任,按照你们约定的格式读取数据,可是,忽然有一天深夜,监控系统忽然报警,南非的大老板进去页面后不断产生错误。做为有修养的程序员,果断cmd+opt+I打开开发者工具,一看,一堆红色报错,就像心脏滴血。通过一整夜的奋战,最后发现,原来是后端发布了新版本,在一个关键接口的返回数据中,统一将数值型的返回值修改为了字符串的数字。心里一阵MMP以后,你如今终于有了HelloType。程序员
图:经过hello-type提供的方法,建立具备必定格式的数据结构github
当你使用HelloType建立了一个特定的数据结构容器以后,利用这个容器,和接收到的API数据进行对比,就能够知道API返回的数据格式是否符合本地规定的格式,数据节点上的数据类型是不是规定的数据类型。一旦API返回的数据格式、类型不符合要求,你就能够追踪到这个错误,而且把错误发送到你的监控系统,而且通知后端同窗“大家改数据类型不通知下游团队,是要药丸吗?”ajax
TypeScript是前端语言的一次升级,然鹅,它只在编译时对项目内的数据类型作检查,而没法作到运行时的类型检查。除了api的数据是不可测的之外,用户输入的数据也不可测,你还会用第三方库吧,或者你本身如今就在写一个第三方库,但凡跨项目的代码,就会有不可测的数据类型。为了学习TypeScript的接口、范型,你大刀阔斧的改项目代码,最后上线了,看看监控系统,心里MMP……typescript
图:利用ES7装饰器,快速对某个方法的输入输出的数据类型进行限制后端
若是你和我同样超级懒不想为了编写一大堆接口、范型、类型写一大堆和业务自己无关的ts代码时,HelloType给你直观的感觉,并且完彻底全是ES语法,不带半点地方方言。api
对业务代码的大举侵入是最讨厌的是,对于个人应用而言,已经作好了程序报错时的万全准备,那就是——提示用户系统出错了!!既然这样,HelloType能够帮助你收集数据类型错误,让你的代码作一段安静的代码。数组
图:利用一个全局函数,抓取错误信息,并将错误信息经过ajax请求上传到服务器
HelloType中到trace方法彻底异步,完全的异步执行,不影响界面的渲染,在追踪到数据类型报错以后,异步执行with方法中的函数,这个函数是自定义的,所以你能够在这个函数里面作任何事情,但它是异步的,你能够收集日志,而后上传到监控系统,干得漂亮。
HelloType默认是兼容模式对数据进行检查的,所谓兼容模式严格模式,主要是针对数组和对象而言。兼容模式下,一个被检查的对象若是属性比规定的要多,并不会报错,只要规定的那部分属性数据类型检查没报错便可。严格模式下,数组的元素个数必须和规定的同样,不能多也不能少,即便IfExists,也会被忽略,必须遵照严格模式。对象的话,主要是属性必须和规定的相同,不能多也不能少,IfExists也同样被忽略。
图:因为多了height属性,会报错。经过strict属性获取一个类型容器的严格模式状态,对结构比较严格要求的状况很是有用
另外,还有一个方法能够开启严格模式:toBeStrict()。它直接改变当前容器为一个严格模式的容器。在必要的时候使用它会让代码显得很精炼。例如:
const SomeType = Dict({ body: Dict({ name: String }).toBeStrict(), // 使用Dict直接做为规则的时候,因为只会在这里用到一次,因此直接调用toBeStrict()比较好 })
JS的数据类型自己的混乱对于开发者而言,简直就是噩梦,可是HelloType让你能够睡个好觉。经过很是合理的代码布局,让你能够很是优秀的拦截因为数据类型问题产生的bug。并且,因为它是基于Error,因此调试起来很是方便,对于监控而言也很是有利,利用它,能够收集具体的错误数据,上报到服务端,由服务端对本身输出的数据格式和类型进行纠正。
本文原载于 https://www.tangshuang.net/he...若是你以为这个想法还不错,github上给个star吧😊