Definisi JQuery bermasalah dengan TypeScript 0.9


Saya baru saja memperbarui ke TypeScript 0.9 dan tiba-tiba file definisi JQuery saya (untuk JQuery 1.8) rusak. Secara spesifik, antarmuka JQuery melaporkan kesalahan pada setiap metode yang didefinisikan di dalamnya. Semua melaporkan "Semua properti harus merupakan subtype dari tipe indeks string '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
}

Seperti yang mungkin Anda duga, antarmuka JQuery didefinisikan dalam banyak file yang berbeda di seluruh proyek saya. Apakah ini bug saat menyatukan antarmuka atau apakah saya melewatkan beberapa perubahan yang perlu dilakukan pada file definisi?

Jawaban #1

Ini bukan bug. Ini adalah fitur yang direncanakan. Ini karena begitu Anda memiliki indexer yang ditentukan, itu juga dapat digunakan untuk mengakses properti dan oleh karena itu properti perlu menjadi subtipe dari indexer. Misalnya:

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

Coba

Anda dapat menemukan definisi Jquery yang berfungsi di sini: https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery/jquery.d.ts