如何将多个TypeScript声明文件捆绑到一个npm包中并从index.d.ts导入?

ee7vknir  于 2023-01-26  发布在  TypeScript
关注(0)|答案(1)|浏览(372)

我有一个内部包,结构如下:

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目录下有多个声明文件,每个文件都有自己的名称空间。

jk9hmnmh

jk9hmnmh1#

我发现,为了在一个入口点中包含所有.ts.d.ts文件,需要将.d.ts类型导入为import { type someType } from './types/type1.d.ts'
因此,根目录中的index.ts文件可能如下所示:

export { utility } from './src/someUtilities'
export { type someType } from './types/type1'

现在,当所有的导入和导出都正确地保存在根目录下生成的index.d.ts文件中,当然,您在转换过程之外创建的.d.ts文件需要复制到types文件夹中。

相关问题