При просмотре определений типов из @types/leaflet
вы можете увидеть пользовательские элементы управления, определенные следующим образом:
export namespace Control {
...
class Zoom extends Control {
constructor(options?: ZoomOptions);
options: ZoomOptions;
}
...
}
Однако при создании пользовательского элемента управления с помощью:
declare module 'leaflet' {
namespace Control {
class CustomControl extends Control {
constructor(options: CustomOptions);
}
}
namespace control {
function customControl(options: CustomOptions): Control.CustomControl;
}
}
L.Control.CustomControl = L.Control.extend({
...
});
throwsошибка машинописного текста:
Type '(new (...args: any[]) => any) & typeof Class' is missing the following properties from type 'typeof CustomControl': Zoom, Attribution, Layers, Scale, and 6 more.
Кажется, это происходит потому, что пространство имен и класс Control
проходят через объединение объявлений Typescript.Это заставляет CustomControl
требовать свойства из пространства имен, а не только из класса.
Есть ли способ исправить это или обойти его, не вызывая тип any
?