Вопрос:
Любой проект, который использует много типов в разных файлах, может использовать типы, определенные в файле сценария .Эти типы видны по всему проекту и не требуют импорта, см. официальный справочник :
В TypeScript, как и в ECMAScript 2015, любой файл, содержащийверхний уровень import
или export
считается модулем.И наоборот, файл без каких-либо объявлений import
или export
верхнего уровня обрабатывается как сценарий, содержимое которого доступно в глобальной области (и, следовательно, также для модулей).
I 'Я использовал эти глобальные типы в моем проекте, и они работали нормально.Но потом я решил превратить проект в модуль NPM.«Глобальные» типы этого модуля должны быть видны только для самого модуля.
Сначала я установил модуль таким, какой он был, без добавления каких-либо <reference/>
s и typeRoots
.Однако при импорте модуля в другой проект TypeScript не смог найти глобальные типы и не скомпилировал.
Затем я добавил <reference path="types.ts" />
ко всем файлам в модуле, которые использовали глобальные типы, затем ятолкнул снова.К моему удивлению, это сделало типы доступными не только для модуля, но и для всего проекта, который его использовал, что привело к конфликтам между локальными типами и типами модуля.
(Обратите внимание, что обе версиимодуль, который я опубликовал, был идеально компилируемым сам по себе, проблемы начались, когда я установил модуль, используя npm i
в другом проекте.)
Есть ли способ сделать "глобальные" типы модулядоступно только в модуле?
Структура моего модуля:
.
├── dist
│ ├── index.d.ts
│ ├── index.js
│ ├── foo.d.ts
│ ├── foo.js
│ ├── types.d.ts
│ └── types.js
├── package.json
├── src
│ ├── index.ts ← contains import/export
│ ├── foo.ts ← contains import/export
│ └── types.ts ← contains only types, no import/export
└── tsconfig.json
Для первой публикации index.ts
и foo.ts
содержат только обычный код - чтозаставил типы не быть распознанными, когда проект.Когда я опубликовал модуль во второй раз, я добавил ///<reference path="types.ts"/>
к index.ts
и foo.ts
.Это было переведено в path="types.d.ts"
в скомпилированных файлах index.d.ts
и foo.d.ts
.
package.json:
{
"name": "@foo/foo",
"version": "1.0.0",
"main": "dist/index.js"
}
tsconfig.json:
{
"include": ["./src"],
"compilerOptions": {
"moduleResolution": "classic",
"outDir": "./dist",
"module": "commonjs",
"declaration": true
}
}