Расширьте JQueryStatic для плагина JQuery, у которого нет файла определения

Я использую плагин IFrame Transport Plugin для JQuery. Он представляет новое свойство iframe в интерфейсе JQueryAjaxSettings. К сожалению, у плагина нет файла определения, что означает, что он выдает ошибки в Intellisense и при компиляции проекта, потому что я должен использовать это свойство iframe в своем коде.

Поэтому я создал 2 новых интерфейса в отдельном файле d.ts, чтобы расширить файл определения JQuery:

interface JQueryIframeTransportStatic extends JQueryStatic {
    ajax(settings: IJQueryIframeTransportAjaxSettings): JQueryXHR;
}

interface IJQueryIframeTransportAjaxSettings extends JQueryAjaxSettings {
    iframe: boolean;
}

Но при компиляции выдает следующую ошибку:

TS2430: сборка: интерфейс JQueryStaticIframeTransport неправильно расширяет интерфейс JQueryStatic.

Я вижу, что TypeScript может быть сбит с толку новой функцией ajax, представленной в моем интерфейсе. Но у него другая подпись. Как еще я мог его продлить?


person Sandro    schedule 20.07.2016    source источник


Ответы (1)


Интерфейс можно расширить следующим образом:

interface JQueryStatic {
    ajax(settings: IJQueryIframeTransportAjaxSettings): JQueryXHR;
}

interface IJQueryIframeTransportAjaxSettings extends JQueryAjaxSettings {
    iframe: boolean;
}


Это просто добавляет объявление новой функции, не требуя конструкции extends. Основываясь на этом, вы можете сделать это всего одним объявлением, а именно.

interface JQueryAjaxSettings {
    iframe: boolean;
}
person Abhishek    schedule 26.07.2016
comment
Ваша первая версия работала. Второй нет. Но я счастлив :) - person Sandro; 26.07.2016
comment
Нет проблем, кстати, я тоже попробовал вторую версию, и она у меня сработала. - person Abhishek; 26.07.2016