我使用Closure Compiler已经有一段时间了,我一直想知道是否有一些引擎可以对数据类型进行运行时验证。
事实上,类型可以让人们少犯错误。例如,在 中Haskell
,可以说,任何数据类型都必须有一个值,如果它不允许Int
,你就不能指定null
或指定一个值。undefined
无论如何,您可以指定一个包装器Maybe Int
,使其可以为空。这意味着该值是否为空,如果它不为空,则可以提取该值。但是您必须首先检查它是否为空,没有办法先访问该值。
Closure Compiler在静态验证数据类型方面做得很好。缺少一些东西,例如更强的空/未定义验证。从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
甚至可以是另一种数据类型(例如,一条记录)。现在我正在做的是递归检查默认实例中包含的类型并将其与下载的版本进行比较。
- 有一个更好的方法吗?
- 有没有我可以使用的库而不是重写轮子?
- 这是胡说八道吗?