diff --git a/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts
new file mode 100644
index 000000000..96ccbe325
--- /dev/null
+++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts
@@ -0,0 +1,62 @@
+///
+
+// Test overloads for `add` method
+$.validator.unobtrusive.adapters.add("adapter", () => { });
+$.validator.unobtrusive.adapters.add("adapter", function () {
+ return true;
+});
+$.validator.unobtrusive.adapters.add("adapter", ["param1", "param2"], () => { });
+
+// Test overloads for `addMinMax` method
+$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule");
+$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule", "minAttr");
+$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule", "minAttr", "maxAttr");
+
+// Test overloads for `addSingleVal` method
+$.validator.unobtrusive.adapters.addSingleVal("adapter", "rule");
+$.validator.unobtrusive.adapters.addSingleVal("adapter", "attr", "rule");
+
+// Test overloads for `addBool` method
+$.validator.unobtrusive.adapters.addBool("adapter");
+$.validator.unobtrusive.adapters.addBool("adapter", "rule");
+
+// Test `addMethod`
+$.validator.unobtrusive.adapters.addMethod("adapter", (value, element, params) => {
+ return true;
+});
+
+// Test method chaining
+$.validator.unobtrusive.adapters
+ .add("required", () => { })
+ .addMinMax("length", "minlength", "maxlength", "rangelength")
+ .addSingleVal("regex", "pattern")
+ .addBool("url")
+ .addMethod("nonalphamin", (value, element, nonalphamin) => {
+ return null;
+ });
+
+// Test `Adapters` indexer
+var adapterName = $.validator.unobtrusive.adapters[0].name;
+
+// Test `Adapters` iterator
+$.each($.validator.unobtrusive.adapters, function (index, adapter) {
+ console.log(adapter.name);
+ console.log(adapter.params);
+ console.log(adapter.adapt);
+});
+
+// Test `Adapters` array
+$.validator.unobtrusive.adapters.push({ name: "adapter", params: ["param1"], adapt: () => { } });
+
+// Test overloads for `parseElement`
+$.validator.unobtrusive.parseElement("form");
+$.validator.unobtrusive.parseElement(document);
+$.validator.unobtrusive.parseElement(document.getElementById("the-form"));
+$.validator.unobtrusive.parseElement($("#the-form"));
+$.validator.unobtrusive.parseElement($("#the-form"), true);
+
+// Test overloads for `parse`
+$.validator.unobtrusive.parse("form");
+$.validator.unobtrusive.parse(document);
+$.validator.unobtrusive.parse(document.getElementById("the-form"));
+$.validator.unobtrusive.parse($("#the-form"));
diff --git a/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts
new file mode 100644
index 000000000..f14b58913
--- /dev/null
+++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts
@@ -0,0 +1,38 @@
+// Type definitions for Microsoft jQuery Unobtrusive Validation v3.2.3
+// Project: http://aspnetwebstack.codeplex.com/
+// Definitions by: Matt Brooks
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module MicrosoftJQueryUnobtrusiveValidation {
+ type JQuerySelector = string | Document | Element | JQuery;
+
+ interface Adapter {
+ name: string;
+ params: string[];
+ adapt: Function
+ }
+
+ interface Adapters extends Array {
+ add(adapterName: string, fn: Function): Adapters;
+ add(adapterName: string, params: string[], fn: Function): Adapters;
+ addMinMax(adapterName: string, minRuleName: string, maxRuleName: string, minMaxRuleName: string, minAttribute?: string, maxAttribute?: string): Adapters;
+ addSingleVal(adapterName: string, ruleName: string): Adapters;
+ addSingleVal(adapterName: string, attribute: string, ruleName: string): Adapters;
+ addBool(adapterName: string, ruleName?: string): Adapters;
+ addMethod(adapterName: string, fn: (value: string, element: Element, params: any) => any): Adapters;
+ }
+
+ interface Validator {
+ adapters: Adapters;
+ parseElement(element: JQuerySelector, skipAttach?: boolean): void;
+ parse(selector: JQuerySelector): void;
+ }
+}
+
+declare module JQueryValidation {
+ interface ValidatorStatic {
+ unobtrusive: MicrosoftJQueryUnobtrusiveValidation.Validator;
+ }
+}