#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.)