diff --git a/jquery.ajaxfile/jquery.ajaxFile-tests.ts b/jquery.ajaxfile/jquery.ajaxFile-tests.ts
new file mode 100644
index 000000000..4a98706a4
--- /dev/null
+++ b/jquery.ajaxfile/jquery.ajaxFile-tests.ts
@@ -0,0 +1,54 @@
+///
+///
+///
+
+function testRawApi(){
+ var inputElement:HTMLInputElement = null;
+ var resultPromise = AjaxFile.send({
+ method: 'POST',
+ url: '/',
+ desiredResponseDataType: JQueryAjaxFile.DataType.Json,
+ files: [
+ { name: 'joeFile', element: inputElement }
+ ],
+ data: {
+ name: 'joe'
+ },
+ timeoutInSeconds: 30
+ })
+ .then(result => console.log('Result: ' + result.data), result => console.log('Error: ' + result.error))
+ .done(result => console.log('Result: ' + result.data))
+ .fail(result => console.log('Error: ' + result.error + " " + result.status.code + " " + result.status.text + " " + result.status.isSuccess))
+ .always(result => console.log('end'))
+ .abord();
+}
+
+function testJQuery() {
+ var inputElement: HTMLInputElement = null;
+ var extension: JQueryAjaxFile.IAjaxFileJQueryExtension = $.fn.ajaxWithFile;
+ var option: JQueryAjaxFile.IJQueryOption = {
+ type: 'POST',
+ url: '/',
+ dataType: "json",
+ files: [
+ { name: 'joeFile', element: inputElement }
+ ],
+ data: {
+ name: 'joe'
+ },
+ success(result) { console.log('Result: ' + result); },
+ error(jqXhr, textStatus, errorThrown) { console.log('Error: ' + errorThrown); },
+ complete(jqXhr, textStatus) { console.log('end'); },
+ global: true,
+ timeout: 60
+ };
+ extension.ajaxWithFile(option);
+}
+
+function testKnockoutExtension(){
+ var fileHandler:KnockoutBindingHandler = ko.bindingHandlers.file;
+}
+
+testKnockoutExtension();
+testJQuery();
+testRawApi();
\ No newline at end of file
diff --git a/jquery.ajaxfile/jquery.ajaxFile.d.ts b/jquery.ajaxfile/jquery.ajaxFile.d.ts
new file mode 100644
index 000000000..459287a27
--- /dev/null
+++ b/jquery.ajaxfile/jquery.ajaxFile.d.ts
@@ -0,0 +1,119 @@
+// Type definitions for jquery.ajaxfile v0.1.0
+// Project: https://github.com/fpellet/jquery.ajaxFile
+// Definitions by: Florent PELLET
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+///
+
+declare namespace JQueryAjaxFile {
+ export enum DataType {
+ Json,
+ Xml,
+ Text
+ }
+
+ interface IFileData {
+ name: string;
+ element: HTMLInputElement;
+ }
+
+ interface IOption {
+ method?: string;
+ url?: string;
+
+ data?: any;
+ files?: IFileData[];
+ desiredResponseDataType?: DataType;
+
+ timeoutInSeconds?: number;
+ }
+
+ interface IResponseStatus {
+ code: number;
+ text: string;
+ isSuccess: boolean;
+ }
+
+ interface IAjaxFileResult {
+ error?: any;
+ data?: any;
+ status?: IResponseStatus;
+ }
+
+ interface IAjaxFileResultCallback {
+ (result: IAjaxFileResult): void;
+ }
+
+ interface IAjaxFilePromise {
+ then(success: IAjaxFileResultCallback, error?: IAjaxFileResultCallback): IAjaxFilePromise;
+ done(success: IAjaxFileResultCallback): IAjaxFilePromise;
+ fail(error: IAjaxFileResultCallback): IAjaxFilePromise;
+ always(error: IAjaxFileResultCallback): IAjaxFilePromise;
+
+ abord(): void;
+ }
+
+ interface IAjaxFileStatic {
+ send(option: IOption): IAjaxFilePromise;
+ }
+
+ interface IJQueryXHR {
+ readyState: any;
+ status: number;
+ statusText: string;
+ responseXML: Document;
+ responseText: string;
+ statusCode?: { [key: string]: any; };
+
+ abort(statusText?: string): void;
+
+ setRequestHeader(header: string, value: string): void;
+ getAllResponseHeaders(): string;
+ getResponseHeader(header: string): string;
+
+ beforeSend?(jqXHR: IJQueryXHR, settings: JQueryAjaxSettings): any;
+ dataFilter?(data: any, ty: any): any;
+ success?(data: any, textStatus: string, jqXHR: IJQueryXHR): any;
+ error?(jqXHR: IJQueryXHR, textStatus: string, errorThrown: string): any;
+ complete?(jqXHR: IJQueryXHR, textStatus: string): any;
+ }
+
+ interface IJQueryOption {
+ type?: string;
+ url?: string;
+
+ data?: any;
+ files?: IFileData[];
+ dataType?: string;
+
+ timeout?: number;
+
+ global?: boolean;
+
+ error?(jqXHR: IJQueryXHR, textStatus: string, errorThrown: string): any;
+ success?(data: any, textStatus: string, jqXHR: IJQueryXHR): any;
+ complete?(jqXHR: IJQueryXHR, textStatus: string): any;
+ }
+
+ interface IAjaxFileJQueryExtension {
+ ajaxWithFile(jqueryOption: IJQueryOption): JQueryDeferred;
+ }
+}
+
+declare var AjaxFile: JQueryAjaxFile.IAjaxFileStatic;
+
+declare module 'ajaxfile' {
+ export = AjaxFile;
+}
+
+declare namespace AjaxFileKnockout {
+ interface IFileInputWrapper {
+ getElement(): HTMLInputElement;
+ fileSelected(): boolean;
+ }
+}
+
+interface KnockoutBindingHandlers {
+ file: KnockoutBindingHandler;
+}