I'm trying to extend the default JQuery interface and the default object jQuery by a function in TypeScript
Code
/// <reference path="jquery.d.ts" />
namespace MyNameSpace {
    var $ = jQuery;
    export interface JQuery {
        test(options: Object): JQuery;
    }
    $.fn.test = function(options: Object): JQuery {
        if (this.length === 0) {
            console.log('Error!');
            return this;
        }
        console.log(options);
        return this;
    }
    export var testBody = function() {
        jQuery('body').test({ 'HELLO': 'TEST' });
    }
}
The Problem
Now I'm running the following code in my console:
tsc -m amd -t ES5 Test.ts -d
I'm getting this error: Test.ts(17,19): error TS2339: Property 'test' does not exist on type 'JQuery'.
Any solution for this?
This works for me:
/// <reference path="typings/jquery/jquery.d.ts" />
interface JQuery {
    test(options: Object): JQuery;
}
namespace MyNameSpace {
    var $ = jQuery;
    $.fn.test = function(options: Object): JQuery {
        if (this.length === 0) {
            console.log('Error!');
            return this;
        }
        console.log(options);
        return this;
    };
    export var testBody = function() {
        jQuery('body').test({ 'HELLO': 'TEST' });
    }
}
EDIT: 2nd solution
/// <reference path="typings/jquery/jquery.d.ts" />
namespace MyNameSpace {
    interface JQueryX extends JQuery {
        test(options: Object): JQuery;
    }
    $.fn.test = function(options: Object): JQuery {
        if (this.length === 0) {
            console.log('Error!');
            return this;
        }
        console.log(options);
        return this;
    };
    export var testBody = function() {
        let a:JQueryX = <JQueryX>$('body');
        a.test({ 'HELLO': 'TEST' });
        // OR
        (<JQueryX>$('body')).test({ 'HELLO': 'TEST' });
    }
}
You can make the testBody nicer by some refactoring.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With