Как добавить TypeScript-объявления во внешнюю библиотеку, которая выставляет себя, присоединяя себя к объекту окна? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть библиотека javascript, которая включается тегом HTML-script. Библиотека выставляет себя, присоединяя себя к объекту окна.

См .:

(function(globals) {
  var django = globals.django || (globals.django = {});
  //...
}(this));

Это (как вы уже догадались) из django-проекта. Документация здесь , но, думаю, это не имеет значения.

Для этого я мог бы просто сделать следующее:

let djangojs = (window as any).django;
// and then:
djangojs.gettext("foo");
//...

Но я подумал, ядобавьте немного ввода, чтобы я сделал

export namespace django {
    export function gettext(msgid: string): string;

    export function ngettext(singular: string, plural: string, count: number): string;

    export function interpolate(fmt: string, obj: object, named: boolean): string;

    export function get_format(format_type:
                                   'DATE_FORMAT' |
                                   'DATE_INPUT_FORMATS' |
                                   'DATETIME_FORMAT' |
                                   'DATETIME_INPUT_FORMATS' |
                                   'DECIMAL_SEPARATOR' |
                                   'FIRST_DAY_OF_WEEK' |
                                   'MONTH_DAY_FORMAT' |
                                   'NUMBER_GROUPING' |
                                   'SHORT_DATE_FORMAT' |
                                   'SHORT_DATETIME_FORMAT' |
                                   'THOUSAND_SEPARATOR' |
                                   'TIME_FORMAT' |
                                   'TIME_INPUT_FORMATS' |
                                   'YEAR_MONTH_FORMAT'
    ): string;

    export function gettext_noop(msgid: string): string;

    export function pgettext(context: string, msgid: string): string;

    export function npgettext(context: string, singular: string, plural: string, count: number): string;

    export function pluralidx(n: number): boolean | number;
}

Теперь, прежде всего, это правильный способ написания такого объявления?

Если я попытаюсь использовать его таким образом, я получаюошибка:

let djangojs: django =  (window as any).django;
// Gives this error:
// TS2709: Cannot use namespace 'django' as a type.

Как правильно использовать объявление типа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...