2012-12-20 13 views
6

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' */

+1

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? –

risposta

10

Il progetto DefinitelyTyped su GitHub fornisce file di definizione per la maggior parte delle librerie JavaScript più diffuse.

Tutto quello che dovete fare è scaricare il file è necessario e di riferimento nel codice come:

///<reference path="path/to/jqueryui-1.9.d.ts"/> 
+0

Se non includo mywidget.d.ts questo codice non verrà compilato e non avrò intellisense: \t /// \t $ (". Teste"). Mywidget ({ \t \t miopzione: "asdadds" \t}); /* compiler out: ... la proprietà 'mywidget' non esiste sul valore di tipo 'JQuery' */ –

+0

+1 per il collegamento. – Olaf

+0

Questo dovrebbe essere contrassegnato come la risposta! – Ahsan

Problemi correlati