Ошибка компиляции bootbox.dialog в TypeScript

Я пытаюсь использовать Bootbox Custom Dialog с помощью bootbox.d.ts. Не удается скомпилировать.

bootbox.dialog({
  message: "I am a custom dialog",
  buttons: {
    success: {
      label: "Success!",
      className: "btn-success",
      callback: function() {
        Example.show("great success");
      }
    },
    danger: {
      label: "Danger!",
      className: "btn-danger",
      callback: function() {
        Example.show("uh oh, look out!");
      }
    },
    main: {
      label: "Click ME!",
      className: "btn-primary",
      callback: function() {
        Example.show("Primary button");
      }
    }
  }
});

Ошибка:

Ошибка 49 Предоставленные параметры не соответствуют ни одной подписи цели вызова: не удалось применить тип «строка» к аргументу 1, имеющему тип «{сообщение: строка; кнопки: { отмена: { метка: строка; имя_класса: строка; }; подтвердитьУдалить: { метка: строка; имя_класса: строка; обратный вызов: () => недействительным; }; }; }'.

bootbox.d.ts:

interface BootboxStatic {
    alert(message: string, callback: () => void): void;
    alert(message: string, customButtonText?: string, callback?: () => void): void;
    confirm(message: string, callback: (result: boolean) => void): void;
    confirm(message: string, cancelButtonText?: string, confirmButtonText?: string, callback?: (result: boolean) => void): void;
    prompt(message: string, callback: (result: string) => void, defaultValue?: string): void;
    prompt(message: string, cancelButtonText?: string, confirmButtonText?: string, callback?: (result: string) => void, defaultValue?: string): void;
    dialog(message: string, handlers: BootboxHandler[], options?: any): void;
    dialog(message: string, handler: BootboxHandler): void;
    dialog(message: string): void;
    hideAll(): void;
    animate(shouldAnimate: boolean): void;
    backdrop(backdropValue: string): void;
    classes(customCssClasses: string): void;
    setIcons(icons: BootboxIcons): void;
    setLocale(localeName: string): void;
    addLocale(localeName: string, translations: BootboxLocale) : void;
}

Как я могу изменить определения, чтобы принять диалог с параметром, который я использую?


person Adam Szabo    schedule 10.02.2014    source источник


Ответы (2)


Я разобрался. Пришлось добавить строчку

dialog(options: any): void; // Had to add this line

в bootbox.d.ts:

interface BootboxStatic {
    alert(message: string, callback: () => void): void;
    alert(message: string, customButtonText?: string, callback?: () => void): void;
    confirm(message: string, callback: (result: boolean) => void): void;
    confirm(message: string, cancelButtonText?: string, confirmButtonText?: string, callback?: (result: boolean) => void): void;
    prompt(message: string, callback: (result: string) => void, defaultValue?: string): void;
    prompt(message: string, cancelButtonText?: string, confirmButtonText?: string, callback?: (result: string) => void, defaultValue?: string): void;
    dialog(message: string, handlers: BootboxHandler[], options?: any): void;
    dialog(message: string, handler: BootboxHandler): void;
    dialog(message: string): void;
    dialog(options: any): void; // Had to add this line
    hideAll(): void;
    animate(shouldAnimate: boolean): void;
    backdrop(backdropValue: string): void;
    classes(customCssClasses: string): void;
    setIcons(icons: BootboxIcons): void;
    setLocale(localeName: string): void;
    addLocale(localeName: string, translations: BootboxLocale) : void; }
person Adam Szabo    schedule 10.02.2014

Я бы использовал массив BootboxHandler

dialog(message: string, handlers: BootboxHandler[], options?: any): void;

interface BootboxHandler {
    label: string;
    class: string;
    callback: (result?: any) => void;
}

Измените свой код на:

bootbox.dialog("I am a custom dialog",
  [{
      label: "Success!",
      class: "btn-success",
      callback: function() {
        Example.show("great success");
      }
    },
    {
      label: "Danger!",
      class: "btn-danger",
      callback: function() {
        Example.show("uh oh, look out!");
      }
    },
    {
      label: "Click ME!",
      class: "btn-primary",
      callback: function() {
        Example.show("Primary button");
      }
    }
  }]
 );
person AP inc.    schedule 10.02.2014