diff --git a/sequelize/sequelize.d.ts b/sequelize/sequelize.d.ts
index fda6503a59..a7a085e205 100644
--- a/sequelize/sequelize.d.ts
+++ b/sequelize/sequelize.d.ts
@@ -5666,7 +5666,7 @@ declare module "sequelize" {
/**
* Validator Interface
*/
- interface Validator extends IValidatorStatic {
+ interface Validator extends ValidatorJS.ValidatorStatic {
notEmpty( str : string ) : boolean;
len( str : string, min : number, max : number ) : boolean;
diff --git a/validator/validator-tests.ts b/validator/validator-tests.ts
index c5a55f59c2..8afabc2099 100644
--- a/validator/validator-tests.ts
+++ b/validator/validator-tests.ts
@@ -1,108 +1,190 @@
-///
+///
-import validator = require("validator");
+import * as validator from 'validator';
+let any: any;
-validator.extend("isTest", function(str) {
- return !str;
-});
+/**************
+ * Validators *
+ **************/
-validator.equals("abc", "Abc");
+{
+ let result: boolean;
-validator.contains("foo", "foobar");
+ result = validator.contains('sample', 'sample');
-validator.matches("foobar", "foo/i");
+ result = validator.equals('sample', 'sample');
-validator.isEmail("sample");
+ result = validator.isAfter('sample');
+ result = validator.isAfter('sample', new Date());
-validator.isURL("sample");
+ result = validator.isAlpha('sample');
-validator.isFQDN("sample");
+ result = validator.isAlphanumeric('sample');
-validator.isMACAddress("sample");
+ result = validator.isAscii('sample');
-validator.isIP("sample");
+ result = validator.isBase64('sample');
-validator.isAlpha("sample");
+ result = validator.isBefore('sample');
+ result = validator.isBefore('sample', new Date());
-validator.isNumeric("sample");
+ result = validator.isBoolean('sample');
-validator.isAlphanumeric("sample");
+ let isByteLengthOptions: ValidatorJS.IsByteLengthOptions;
+ result = validator.isByteLength('sample', isByteLengthOptions);
+ result = validator.isByteLength('sample', 0);
+ result = validator.isByteLength('sample', 0, 42);
-validator.isBase64("sample");
+ result = validator.isCreditCard('sample');
-validator.isHexadecimal("sample");
+ let isCurrencyOptions: ValidatorJS.IsCurrencyOptions;
+ result = validator.isCurrency('sample');
+ result = validator.isCurrency('sample', isCurrencyOptions);
-validator.isHexColor("sample");
+ result = validator.isDate('sample');
-validator.isLowercase("sample");
+ result = validator.isDecimal('sample');
-validator.isUppercase("sample");
+ result = validator.isDivisibleBy('sample', 2);
-validator.isInt("sample");
+ let isEmailOptions: ValidatorJS.IsEmailOptions;
+ result = validator.isEmail('sample');
+ result = validator.isEmail('sample', isEmailOptions);
-validator.isFloat("sample");
+ let isFQDNOptions: ValidatorJS.IsFQDNOptions;
+ result = validator.isFQDN('sample');
+ result = validator.isFQDN('sample', isFQDNOptions);
-validator.isDivisibleBy("sample", 2);
+ let isFloatOptions: ValidatorJS.IsFloatOptions;
+ result = validator.isFloat('sample');
+ result = validator.isFloat('sample', isFloatOptions);
-validator.isNull("sample");
+ result = validator.isFullWidth('sample');
-validator.isLength("sample", 3, 5);
+ result = validator.isHalfWidth('sample');
-validator.isByteLength("sample", 3);
+ result = validator.isHexColor('sample');
-validator.isUUID("sample");
+ result = validator.isHexadecimal('sample');
-validator.isDate("sample");
+ result = validator.isIP('sample');
+ result = validator.isIP('sample', 6);
-validator.isAfter("sample");
+ result = validator.isISBN('sample');
+ result = validator.isISBN('sample', 13);
-validator.isBefore("sample");
+ result = validator.isISIN('sample');
-validator.isIn("sample", []);
+ result = validator.isISO8601('sample');
-validator.isCreditCard("sample");
+ result = validator.isIn('sample', []);
-validator.isISBN("sample");
+ let isIntOptions: ValidatorJS.IsIntOptions;
+ result = validator.isInt('sample');
+ result = validator.isInt('sample', isIntOptions);
-validator.isJSON("sample");
+ result = validator.isJSON('sample');
-validator.isMultibyte("sample");
+ let isLengthOptions: ValidatorJS.IsLengthOptions;
+ result = validator.isLength('sample', isLengthOptions);
+ result = validator.isLength('sample', 3);
+ result = validator.isLength('sample', 3, 5);
-validator.isAscii("sample");
+ result = validator.isLowercase('sample');
-validator.isFullWidth("sample");
+ result = validator.isMACAddress('sample');
-validator.isHalfWidth("sample");
+ result = validator.isMobilePhone('sample', 'en-US');
-validator.isVariableWidth("sample");
+ result = validator.isMongoId('sample');
-validator.isSurrogatePair("sample");
+ result = validator.isMultibyte('sample');
-validator.isMongoId("sample");
+ result = validator.isNull('sample');
-validator.toString(123);
+ result = validator.isNumeric('sample');
-validator.toDate(1225);
+ result = validator.isSurrogatePair('sample');
-validator.toFloat('011');
+ let isURLOptions: ValidatorJS.IsURLOptions;
+ result = validator.isURL('sample');
+ result = validator.isURL('sample', isURLOptions);
-validator.toInt('aa');
+ result = validator.isUUID('sample');
+ result = validator.isUUID('sample', 5);
-validator.toBoolean('yes!');
+ result = validator.isUppercase('sample');
-validator.trim(' triming ');
+ result = validator.isVariableWidth('sample');
-validator.ltrim(' triming ');
+ result = validator.isWhitelisted('sample', 'abc');
+ result = validator.isWhitelisted('sample', ['a', 'b', 'c']);
-validator.rtrim(' triming ');
+ result = validator.matches('foobar', 'foo/i');
+ result = validator.matches('foobar', 'foo', 'i');
+}
-validator.escape('