Можно ли опубликовать пакет с объявлением окружающего модуля?

#typescript #module #declaration #type-declaration #ambient

Вопрос:

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

Я хочу избежать создания .d.ts файла для каждого модуля, так как все они будут одинаковыми.

Вместо этого я хотел бы создать index.d.ts файл в корне пакета с чем-то вроде этого:

 // pkg-with-many-assets/index.d.ts

declare module 'pkg-with-many-assets/*' {
    const svgPath: string;
    export default svgPath;
}

 

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

Можно ли создать пакет с объявлением окружающего модуля?


Редактировать: Кажется, это действительно возможно, потому что @types/simple-icons делает это. Однако, если я скопирую и вставлю @types/simple-icons/index.d.ts файл simple-icons/index.d.ts в свой node_modules каталог, он больше не будет работать.

Возможно, проблема в том, что TypeScript не читает index.d.ts файл в корне simple-icons пакета (несмотря на "types": "index.d.ts" спецификацию в package.json ).

Мне удалось заставить вышеперечисленное работать , указав имя пакета tsconfig.json compilerOptions.types , но, очевидно, я хотел бы, чтобы это обнаружение было автоматическим без ручной настройки.

Ответ №1:

В документации упоминается, что

Если указаны типы, то в глобальную область будут включены только перечисленные пакеты.

Таким образом, вполне возможно, что у вас уже указаны типы, что останавливает автоматическое обнаружение вашего пакета @types. Попробуйте полностью удалить CompilerOptions.types

Комментарии:

1. Это было то состояние, в котором я был изначально, но оно не работает. (Кстати, пользовательский пакет, поэтому никаких @types/* через DefinitelyTyped.)