Sto creando un widget jQuery con widget factory digitato in dattiloscritto. Come fornire un buon intellisense senza dover scrivere .d.ts?Il modo migliore per rendere jquery ui con dattiloscritto
es:
/*mywidget.ts*/
$.widget("ui.mywidget", {
options: {
myoption: ""
},
doSomething: function() {
this._hasDoSomething = true;
/*do doSomething*/
},
hasDoSomething: function(): bool {
return <bool>this._hasDoSomething;
}
});
/*mywidget.d.ts*/
interface MyWidgetOptions {
myoption: string;
}
interface MyWidget extends Widget, MyWidgetOptions {}
interface NLIB {
mywidget: MyWidget;
}
interface JQuery {
mywidget(): JQuery;
mywidget(methodName: string): JQuery;
mywidget(options: MyWidgetOptions): JQuery;
mywidget(optionLiteral: string, optionName: string): any;
mywidget(optionLiteral: string, options: MyWidgetOptions): any;
mywidget(optionLiteral: string, optionName: string, optionValue: any): JQuery;
}
interface JQueryStatic {
nlib: NLIB;
}
/// <reference path="teste.d.ts" />
$(".teste").mywidget({
myoption: "asdadds"
});
troppo noioso per scrivere .d.ts per ogni plugin. Qualche alternativa?
nota: Se non includere un mywidget.d.ts questo codice non sarà di compilazione e non avrà intellisense:
///<reference path="path/to/jqueryui-1.9.d.ts"/>
$(".teste").mywidget({
myoption: "asdadds"
});
/* compilatore out: ... la proprietà 'mywidget' non esiste sul valore di tipo 'JQuery' */
Credo di condividere la motivazione per questa domanda. Io amo ** dattiloscritto, ma mi piacerebbe avere una buona risposta per una libreria di manipolazione DOM "nativa" dattiloscritta che potesse essere estesa per costruire widget UI nativi dattiloscritti (come il completamento automatico). Capisco perché la JQuery UI Widget Factory (che ho anche amato, pre-dattiloscritto) è una brutta partita qui, ma quale altra soluzione tipizzata è invece possibile? –