Как я могу добавить интерфейс TypeScript для модального конструктора начальной загрузки

Я работаю над преобразованием существующей кодовой базы для использования TypeScript.

Наш код включает в себя этот хак (это обходной путь для ошибки начальной загрузки):

jQuery().modal.Constructor.prototype.enforceFocus = function () {};

Typescript это не нравится и выдает эту ошибку:

Свойство «Конструктор» не существует для значения типа «{ (параметры?: ModalOptions): JQuery; (варианты?: ModalOptionsBackdropString): JQuery; (команда: строка): JQuery; }'.

Это соответствующие определения типов (из bootstrap.TypeScript.DefinitelyTyped):

interface JQuery {
    modal(options?: ModalOptions): JQuery;
    modal(options?: ModalOptionsBackdropString): JQuery;
    modal(command: string): JQuery;
}

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


person Jonathan Moffatt    schedule 16.12.2013    source источник
comment
Я использовал этот файл, и он хорошо работает nuget.org/packages/bootstrap.TypeScript.DefinitelyTyped   -  person Harry    schedule 11.03.2016


Ответы (1)


К сожалению, вы не можете определить член var + функцию с тем же именем. то есть следующая ошибка компилятора:

interface foo {
    a();
    a:number;
} 

При этом вы можете сделать:

(<any>jQuery()).modal.Constructor.prototype.enforceFocus = function () {};

Если бы в TypeScript были объединения типов, которых нет (вы можете проголосовать за них здесь https://typescript.codeplex.com/workitem/1364), вы могли бы сделать следующее:

interface foo {
    a:()=>void | number;
} 
person basarat    schedule 16.12.2013