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.
