繁体   English   中英

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

[英]How to bundle many TypeScript declaration files into an npm package and import from index.d.ts?

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

myPackage/
|- types/
|  |- type1.d.ts
|  |- type2.d.ts
|- src/
|  |- someUtilities.ts
|- index.ts
|- package.json
|- tsconfig.json

index.ts正在导入和导出./src中的所有.d.ts文件以及./types中的所有.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 中的任何内容的转译版本。 到目前为止一切都很好。

我有另一个 (CRA) 项目,我想在其中使用这个内部 package。我打包myPackage ,然后在另一个项目中我放入 package.json

dependencies: {
  "myPackage": "file:pathToMyPackage.tgz"
}

在开发过程中,VSCode 从 package 中正确地找到了所有类型和函数。但是,当我运行npm run build时,它只是运行react-scripts 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

然后,我尝试在 package 根目录下使用一个索引,并使用这些三重斜杠指令指向类型。 那种工作,但在其他项目中,我必须在导入时使用特定类型的完整路径

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

我发现为了将所有.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文件需要复制到类型文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM