TypeScript: подфункция в DefiniteTyped - PullRequest
2 голосов
/ 07 февраля 2020

Я работаю над созданием DefinitiveTyped для частного пакета (я не могу изменить исходный код), и я не могу найти способ реализовать тип, подобный этому:

  GlobalNameSpace.foo = function(arg) {} 
  GlobalNameSpace.foo.bar1 = function(arg) {} ;
  GlobalNameSpace.foo.foo2 = function(arg) {};

Я пытался использовать class по моему index.d.ts но foo это не class к сожалению это нормальная функция.

моя попытка:

declare namespace GlobalNameSpace {
    function foo(options: any): void;
}

Любая идея, как я могу решить эту проблему?

1 Ответ

1 голос
/ 07 февраля 2020

Любая функция, например:

function foo(options: any): void;

, может быть выражена как вызываемый объект, например:

const foo: {
    (options: any): void;
}

Кроме того, любой объект может иметь дополнительные свойства. Эти свойства также могут быть вызваны, поэтому совершенно верно следующее:

declare namespace GlobalNameSpace {
    const foo: {
        (options: any): void;

        bar1: { (arg: any): void };
        foo2: { (arg: any): void };
    }
}

Обратите внимание, что переменная const немного отличается от function. Функции поднимаются например. Но в приведенном выше случае они эквивалентны.

...