Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript在命名空间下扩展JQuery_Javascript_Jquery_Namespaces_Typescript_Extending - Fatal编程技术网

Javascript TypeScript在命名空间下扩展JQuery

Javascript TypeScript在命名空间下扩展JQuery,javascript,jquery,namespaces,typescript,extending,Javascript,Jquery,Namespaces,Typescript,Extending,我试图通过TypeScript中的函数扩展默认的JQuery接口和默认的对象JQuery 代码 /// <reference path="jquery.d.ts" /> namespace MyNameSpace { var $ = jQuery; export interface JQuery { test(options: Object): JQuery; } $.fn.test = function(options: Objec

我试图通过TypeScript中的函数扩展默认的
JQuery
接口和默认的对象
JQuery

代码

/// <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' });
    }
}
//
名称空间MyNameSpace{
var$=jQuery;
导出接口JQuery{
测试(选项:Object):JQuery;
}
$.fn.test=函数(选项:对象):JQuery{
如果(this.length==0){
console.log('Error!');
归还这个;
}
console.log(选项);
归还这个;
}
导出var testBody=function(){
jQuery('body').test({'HELLO':'test'});
}
}
问题

现在,我正在控制台中运行以下代码:
tsc-m amd-t ES5 Test.ts-d

我收到以下错误:
Test.ts(17,19):错误TS2339:类型“JQuery”上不存在属性“Test”。

有什么解决办法吗?

这对我来说很有效:

/// <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' });
    }
}
//
接口JQuery{
测试(选项:Object):JQuery;
}
名称空间MyNameSpace{
var$=jQuery;
$.fn.test=函数(选项:对象):JQuery{
如果(this.length==0){
console.log('Error!');
归还这个;
}
console.log(选项);
归还这个;
};
导出var testBody=function(){
jQuery('body').test({'HELLO':'test'});
}
}
编辑:第二种解决方案

/// <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' });
    }
}
//
名称空间MyNameSpace{
接口JQueryX扩展了JQuery{
测试(选项:Object):JQuery;
}
$.fn.test=函数(选项:对象):JQuery{
如果(this.length==0){
console.log('Error!');
归还这个;
}
console.log(选项);
归还这个;
};
导出var testBody=function(){
设a:JQueryX=$('body');
a、 test({'HELLO':'test'});
//或
test({'HELLO':'test'});
}
}
通过一些重构,您可以使
testBody
更好