Javascript TypeScript在命名空间下扩展JQuery
我试图通过TypeScript中的函数扩展默认的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
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
更好