我已经使用 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
甚至可以是另一种数据类型(例如记录)。现在我正在做的是递归检查默认实例中包含的类型,并将其与下载的版本进行比较。
答案 0 :(得分:4)
有很多库可以帮助验证JavaScript中的数据类型,但我认为最全面和最受欢迎的库是tcomb(及其相关库tcomb-validation)。
还为那些为Node.js创建hapi的人们提供了joi。但是,我发现尝试在浏览器中运行joi可能很麻烦。此外,与tcomb相比,我发现使用joi捕获复杂数据类型更加困难,但这取决于您的用例。
答案 1 :(得分:2)