问题:我建立了一个库,该库在结构化文件夹中包含许多.ts
文件。现在,我想发布此库,但不想共享源代码(打字稿文件)。
尝试::当我运行tsc
命令时,它将生成一个与每个.js
文件相对应的.ts
文件。当我将declaration: true
保留在tsconfig.json
文件中时,tsc
还会为每个.d.ts
文件生成.ts
文件。
挑战:我所有的.js
文件都是按预期结构生成的,但是.d.ts
也在.js
文件的并行位置生成。现在的挑战是,通过这种方式,该库的任何使用者如何导入类型,因为它们都分散在不同的文件夹中,因为.d.ts
tsc
文件
我看到NPM上有很多模块(例如https://github.com/winstonjs/winston),它们会发布单个index.d.ts
文件,然后消费者将其导入以使用并利用Typescript的优势。
当前我的项目结构如下:
- my-project-root-directory
- src
- demo
- main.ts
- sample.ts
-lib
- constants
- some_constant_file1.ts
- models
- some_model_file1.ts
- some_model_file2.ts
- util
- some_util_file.ts
- dist
- demo
- main.js
- main.d.ts
- sample.js
- sample.d.ts
-lib
- constants
- some_constant_file1.js
- some_constant_file1.d.ts
- models
- some_model_file1.js
- some_model_file1.d.ts
- some_model_file2.js
- some_model_file2.d.ts
- util
- some_util_file.js
- some_util_file.d.ts
- logs
- package.json
- tsconfig.json
显然没有index.d.ts
文件,如何获取单个文件?单个.d.ts
文件方法正确吗?还是我朝错误的方向前进?
我已经在youtube上的stackoverflow和教程上看到了许多答案,它们都显示了一个简单的示例,其中只有一个index.ts文件和与之对应的index.d.ts文件。但是我找不到解决我目的的完美方法。
感谢阅读我的问题,欢迎您提供帮助。
答案 0 :(得分:2)
这就是我的做法:
index.ts
文件,该文件导出对库使用者有意义的类型。例如:src/lib/constants/index.ts
,src/lib/models/index.ts
,...每个index.ts
文件都导出其文件夹中存在的所有TypeScript类型,以及其子文件夹中的所有index.ts
文件。 src/index.ts
文件,该文件将从所有src/...
子文件夹中导出所有内容。package.json
中,添加一个types: "dist/index.d.ts"
条目。.npmignore
文件中,添加一个src/
条目。使用这种方法,您可以在一个中央dist/index.d.ts
文件中引用所有导入,因此库的使用者无需从包内的其他位置导入类型。另外,您根本不会分发TypeScript源。
这是您的目录结构最终看起来像的样子。我排除了dist
文件夹,但是在每个文件夹中也会生成一个index.js
和index.d.ts
文件:
- my-project-root-directory
- src
- index.ts
- demo
- main.ts
- sample.ts
-lib
- constants
- some_constant_file1.ts
- index.ts
- models
- some_model_file1.ts
- some_model_file2.ts
- index.ts
- util
- some_util_file.ts
- index.ts
- logs
- package.json
- tsconfig.json
例如,您的src/lib/constants/index.ts
文件可能如下所示:
export * from './some_constant_file1.ts'
您的src/lib/index.ts
文件:
export * from './constants';
export * from './models';
export * from './util';
您的src/index.ts
文件:
export * from './lib';