是否有JavaScript的代码合同库?

有很多表单validation库和jQuery插件。 虽然我找不到代码契约库,但用于validation函数参数。

例如,要在.NET中进行合同validation,您可以使用未完成的条件库 。 我正在寻找类似于JavaScript的东西。 我能找到的最接近的是Speks ,但是它用于Node.js并且适合测试,而我需要将validation烘焙到发布代码中。

我需要的validation方法示例:检查null,empty,isstring,isnumber,length,min,max,value,less,greater,between,not equal,not less,not greater等。

这是一个运行时类型契约库,它采用了一些类似Haskell的语法: http : //code.google.com/p/ristretto-js 。

对于这个问题的实现,我印象非常深刻:

JavaScript代码合同库?

例:

function syncTime(serverTime, now) { Verify.value(serverTime).always().isDate(); // Cannot be undefined or null. Verify.value(now).whenDefined().isDate(); // Cannot be null, but must be date when defined. //Code } 

为什么不自己滚动图书馆?

使用策略模式 ,您可以轻松地对特定值运行一系列方法。

这是一个半粗略的例子。 这显然需要更多的error handling和修改,但它为您可以构建的内容提供了一个想法。 http://jsfiddle.net/fBfgz/

 var validator = (function() { // Available checks var types = { isNum: function(value) { return !isNaN(value); }, isNull: function(value) { return value === null; } }; return { validate: function (data) { var i, len, check, ret; for (i = 0, len = data.checks.length; i < len; i += 1) { if (types.hasOwnProperty(data.checks[i])) { check = types[data.checks[i]]; ret = check(data.value); alert(ret); if (!ret) { return false; } } } return true; } }; }()); validator.validate({ // will return true value: 32, checks: ['isNum'] }); validator.validate({ // will return false value: 32+'a', checks: ['isNum'] }); 

我可能会使用QUnit进行通用的javascript测试。 还可以查看Tim Disney的contract.js ,这可能更具体针对您的用例。

甜蜜合约完全符合您的要求。

Sweet-contracts是一个需要sweet.js的模块,并使用宏将合同添加到语言中。 这样,您就不必使用现有(通常不够/低效)的语言结构来破解合同。

sweet.js允许您创建可以模块化扩展语言的宏。 这篇博文简要介绍了甜蜜和宏的力量。 您可以在此地址的浏览器中实时试用。