TypeScript 在命名空间下扩展 JQuery
TypeScript extend JQuery under Namespace
我正在尝试通过 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' });
}
}
问题
现在我在我的控制台中 运行 以下代码:
tsc -m amd -t ES5 Test.ts -d
我收到此错误:Test.ts(17,19): error TS2339: Property 'test' does not exist on type 'JQuery'.
有什么解决办法吗?
这对我有用:
/// <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' });
}
}
编辑:第二个解决方案
/// <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' });
}
}
您可以通过一些重构使 testBody
更好。
我正在尝试通过 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' });
}
}
问题
现在我在我的控制台中 运行 以下代码:
tsc -m amd -t ES5 Test.ts -d
我收到此错误:Test.ts(17,19): error TS2339: Property 'test' does not exist on type 'JQuery'.
有什么解决办法吗?
这对我有用:
/// <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' });
}
}
编辑:第二个解决方案
/// <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' });
}
}
您可以通过一些重构使 testBody
更好。