我有一个内部包,结构如下:
myPackage/
|- types/
| |- type1.d.ts
| |- type2.d.ts
|- src/
| |- someUtilities.ts
|- index.ts
|- package.json
|- tsconfig.json
index.ts
在./types
中导入和导出所有.d.ts
文件,在./src
中导入和导出所有.ts
文件。我用tsc
翻译它,并将所有声明文件复制到构建中,得到这个结构。
myPackage/
|- types/
| |- type1.d.ts
| |- type2.d.ts
|- src/
| |- someUtilities.ts
|- index.d.ts
|- index.js
|- package.json
index.d.ts正确地具有所有类型的导入和导出,正如预期的那样,index.js具有我在src中的任何内容的transpiled版本。到目前为止,一切顺利。
我有另一个(CRA)项目,我想在那里使用这个内部包。我打包myPackage
,然后在另一个项目中,我把
dependencies: {
"myPackage": "file:pathToMyPackage.tgz"
}
在开发过程中,VSCode从包中正确地找到了所有类型和函数,但是当我运行npm run build
时,我得到了一个错误Module not found: Can't resolve './types/type1.d.ts' in '/node_modules/myPackage
。
如果我在types目录下创建一个索引文件,并将其指定为package.json中的类型,那么构建过程将找到这些类型,但显然无法从src文件中找到所传递的类型。
myPackage/
|- types/
| |- type1.d.ts
| |- type2.d.ts
| |- index.d.ts <- this one importing those above and works in when using as dep in other projects
|- src/
| |- someUtilities.ts
|- index.d.ts <- this isn't found because package.json points to types/index.d.ts as types
|- index.js
|- package.json
然后我试着在包根目录下使用一个索引,并使用三个斜杠指令来指向类型,这样就可以了,但是在其他项目中,我必须在导入某个类型时使用它的完整路径
// index.ts at package root
/// <reference path="./types/type1.d.ts">
/// <reference path="./types/type1.d.ts">
import { someUtility } from './src/someUtilities'
export { someUtility }
// Doesn't work
import { someType } from 'myPackage'
// Works
import { someType } from 'myPackage/path/to/the/type/file'
有没有可能把所有的类型分离到它们各自的文件中,然后以某种方式捆绑它们,这样就可以从索引中导入它们,或者我需要手动地把它们捆绑到一个巨大的index.d.ts
文件中,然后从那里使用它们?我不想这样做,因为索引声明文件将是巨大且难以管理的。我在types目录下有多个声明文件,每个文件都有自己的名称空间。
1条答案
按热度按时间jk9hmnmh1#
我发现,为了在一个入口点中包含所有
.ts
和.d.ts
文件,需要将.d.ts
类型导入为import { type someType } from './types/type1.d.ts'
因此,根目录中的
index.ts
文件可能如下所示:现在,当所有的导入和导出都正确地保存在根目录下生成的
index.d.ts
文件中,当然,您在转换过程之外创建的.d.ts
文件需要复制到types文件夹中。