2013-06-19 3 views
2

Я просто обновился до TypeScript 0.9, и внезапно мой файл определения JQuery (для JQuery 1.8) взорвался. В частности, интерфейс JQuery сообщает об ошибке для каждого метода, определенного внутри. Все они сообщают «Все свойства должны быть подтипами строкового типа индексатора„HTMLElement“.Определение JQuery с помощью TypeScript 0.9

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 
} 

Как и следовало ожидать, интерфейс JQuery определяются во многих различных файлах по моему проекту. Является ли это ошибка с унификацией интерфейсов или мне не хватает некоторых изменений, которые необходимо внести в файлы определений?

ответ

5

Это не ошибка. Его запланированная функция. Это связано с тем, что после определения индексатора его можно использовать и для доступа к свойствам и, следовательно, свойства должны быть подтипами индексатора, например:

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

Try It

Вы можете найти рабочие определения Jquery здесь: https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery/jquery.d.ts

+2

Спасибо. Следует отметить, что этим ограничителем подвержены только индексы с ключом * string *. – MgSam

Смежные вопросы