Javascript运行时类型检查引擎

我已经使用Closure Compiler一段时间了,我一直想知道是否有一些引擎可以对数据类型进行运行时验证.

事实是类型允许人们减少错误.例如,在Haskell中,让我们说Int,任何数据类型都必须有一个值,如果它不允许,你就不能指定null或undefined给一个值.无论如何,你可以指定一个像Maybe Int这样的包装器使它可以为空.这意味着该值为null或不为null,如果它不为null,则可以提取该值.但是你首先要检查它是否为空,否则无法首先访问该值.

Closure Compiler在静态验证数据类型方面做得非常好.有些东西丢失了,比如更强的null / undefined验证.从Closure Compiler中逃脱的其他事情是使用从服务器下载的数据进行类型检查.即使您信任您的服务器,规格也会发生变化,您的代码也会变更.测试可以验证这种不匹配,但如果这些验证可以直接在代码中进行则会更好.他们甚至可以记录试图匹配类型的错误.

以下代码是服务器响应的极简主义示例:

/**
 * Server result data types
 * @param {T} t [description]
 * @template T
 */
ServerResult = {
  /**
   * Result code from server
   * @type {Number}
   */
  code: 0,

  /**
   * Result data from server
   * @type {T}
   */
   data: null,

  /**
   * Message of the server in case something didn't go as expected
   * @type {String}
   */
  message: ''
};

Result.data甚至可以是另一种数据类型(例如记录).现在我正在做的是以递归方式检查默认实例中包含的类型,并将其与下载的版本进行比较.

>有更好的方法吗?
>我有没有可以使用的库而不是重写*?
>这是胡说八道吗?

解决方法:

有很多库可以帮助验证JavaScript中的数据类型,但我相信最全面和最受欢迎的库是tcomb(及其相关库tcomb-validation).

还有来自为Node.js创建hapi的人们的joi.但是,我发现尝试在浏览器中运行joi可能很麻烦.此外,与tcomb相比,我发现使用joi捕获复杂数据类型更加困难,但这取决于您的用例.

上一篇:MySQL:更好的几个表有数百万行或数千个带有几行行的表


下一篇:php – 现有的电子商务框架与可扩展性的自定义电子商务解决方案[已关闭]