Объявите модуль машинописного текста, который является одновременно типом и значением - PullRequest
2 голосов
/ 10 апреля 2020

Я делаю наборы для WordPress wp.customize API. Однако я столкнулся с проблемой и не знаю, как объявить экспорт верхнего уровня.

Проблема заключается в следующем:

  • wp.customize расширяет класс с именем Values, что определено в «модуле». Кроме того, у этого класса есть подпись вызова (потому что на самом деле это не класс машинописного текста, а множество ужасных JS хаков). Таким образом, вы должны иметь возможность вызывать wp.customize()
  • wp.customize с переменными-членами и функциями. Таким образом, они должны быть доступны, например, wp.customize.get()
  • wp.customize также содержит классы и типы, такие как Setting, так что вы не сможете делать
function xxx (a: wp.customize.Setting){

Я не знаю, как сделать все это одновременно. Я не являюсь автором библиотеки, поэтому я никоим образом не могу ее изменить, я просто хочу создать для нее типографию. Я сделал следующее:

// index.d.ts

import {Customize} from './Customize';

declare const customize: Customize;

export = customize;



// Customize.d.ts

export interface Customize extends Values {
    Setting: typeof Setting;
    get(): any;
}

В идеале я хотел бы импортировать наборы так же, как реализованы другие наборы WordPress, но это не является строго необходимым:

declare const wp: {
  customize: typeof import("wordpress__customize");
};

Однако, тогда я не могу использовать типы, такие как wp.customize.Setting. Я получаю error TS2503: Cannot find namespace 'wp'.

...