JQuery-definitionen krånglade till det med TypeScript 0.9


Jag uppgraderade precis till TypeScript 0.9 och plötsligt har min JQuery-definitionfil (för JQuery 1.8) exploderat. Specifikt rapporterar gränssnittet JQuery ett fel på varje enskild metod som är definierad där. De rapporterar alla "Alla egenskaper måste vara underklasser av strängindexeringstypen 'HTMLElement'."

interface JQuery {

    ajaxComplete(handler: any): JQuery;
    ajaxError(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
    ajaxSend(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
    ajaxStart(handler: () => any): JQuery;
    ajaxStop(handler: () => any): JQuery;
    ajaxSuccess(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
    ... //All reporting same error
}

Som du kanske förväntar dig är JQuery-gränssnittet definierat i många olika filer i mitt projekt. Är detta ett fel med att förena gränssnitten eller missar jag någon ändring som behöver göras i definitionsfilerna?

Svar #1

Detta är inte ett fel. Det är en planerad funktion. Detta beror på att när du har definierat en indexer, kan den användas för att komma åt egenskaper också och därför behöver egenskaper vara subtyper av indexern. t.ex.:

interface Foo{
    [x:string]:number; // Now all properties must be subtypes of number 
    bar:number ; // okay 
    baz:string ; // Error  
}

Prova det

Du kan hitta fungerande Jquery-definitioner här: https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery/jquery.d.ts