Я создаю библиотеку с Typescript, которая должна поддерживать сторонние плагины. Функция конструктора библиотеки должна принимать параметры базовой библиотеки и всех плагинов, поскольку модуль загрузит их в конструктор.
Можно ли предоставить базовый интерфейс Options
, который каждый плагин может расширять, добавляя свои собственные свойства и типы, чтобы во всем приложении верхнего уровня (которое использует библиотеку и плагины) интерфейс Options
отражал и основные параметры, и те из плагинов?
То есть с такой структурой зависимостей:
- user-app
|- my-library
|- my-library-plugin-a
|- my-library-plugin-b
Где my-library
определяет следующее:
export interface Options {
coreOption : string;
}
И my-library-plugin-a
расширяет его следующим образом:
export interface PluginAOptions extends Options {
pluginA : boolean;
}
И my-library-plugin-b
расширяет его следующим образом:
export interface PluginBOptions extends Options {
pluginB : Record<string, string>;
}
Для разработчика user-app
, в состав которого входят все три модуля, интерфейс параметров, экспортированный из my-library
, должен выглядеть следующим образом:
interface Options {
coreOption : string;
pluginA : boolean;
pluginB : Record<string, string>;
}
Так вот что должно показать их автозаполнение, и что должен проверять компилятор Typescript.
Возможно ли что-то подобное с Typescript?