javascript - TypeScript utvider JQuery under navneområde


Jeg prøver å utvide standard JQuery-grensesnittet og standardobjektet jQuery med en funksjon i TypeScript

Kode

/// <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' });
    }
}

Problemet

Nå kjører jeg følgende kode i konsollen min: tsc -m amd -t ES5 Test.ts -d

Jeg får denne feilen: Test.ts(17,19): error TS2339: Egenskapen 'test' finnes ikke på typen 'JQuery'.

Noen løsning for dette?

Svar #1

Dette fungerer for meg:

/// <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' });
    }
}

REDIGER: 2. løsning

/// <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' });
    }
}

Du kan gjøre testBody penere ved å gjøre litt refaktorering.

Relaterte artikler