typescript - TypeScript 库中的绝对导入打包为带有类型声明的 ES 模块
问题描述
我有一个用 TypeScript 编写的库,并在内部使用绝对导入来避免深度嵌套的相对导入语句,例如
import {Something} from '../../../../root-level-module';
而是写
import {Something} from 'root-level-module';
为了让它正确编译,我使用
{
"compilerOptions": {
"baseUrl": "./src"
}
}
在我的tsconfig.json
.
我能够使用babel-plugin-module-resolver在发出的 ES 模块中正确转换这些导入语句。
.d.ts
npm包还包括.js
使用tsc --emitDeclarationOnly
.
问题是import
声明文件中的语句没有被转换,所以这个包的消费者无法读取它们。
据我所知,TypeScript 本身并没有提供任何方式来发出其内部路径解析机制的结果:https ://www.typescriptlang.org/docs/handbook/module-resolution.html
我尝试了一些类型声明捆绑器和一些打字稿转换器,但无法使其正常工作。
这与我的库的另一个特定问题有关:它使用babel-plugin-inline-react-svg来转换SVG
导入到 React 组件中的文件。这由类型声明 ( svg.d.ts
) 支持:
declare module '*.svg' {
...
}
编译器正确理解诸如导入语句,import Icon from 'icon.svg';
并且它们在发出的.js
文件中由 babel 正确转换,但我无法以任何其他项目可以使用库的方式使类型声明文件正确。
那么,我在这里错过了什么吗?编写 TypeScript 库(作为 NPM 包)的正确方法是什么:
- 被编译成 ES 模块而不是捆绑
- 具有类型声明(捆绑或不捆绑)
- 可以在内部使用绝对导入(以避免深度嵌套的相对导入)
- 可以使用 babel 插件将 SVG 文件转换为 React 组件吗?
解决方案
推荐阅读
- javascript - 如何在 Amplify 上使用 gatsby 站点地图
- scala - Hudi:在嵌入式模式下访问时间服务器超时
- javascript - 使用 JS 在 HTML 中加载非图像文件
- python - 读取 CSV 中的一个数字并使用 Pandas 进行计算
- r - 对于 R 中的绘图,如何使 y 轴的一部分变大?
- typescript - Nestjs:避免在服务的构造函数中重复表达
- python - 如何在 UUID 字符串中插入连字符?
- php - mysqli查询中的条件
- node.js - 如何使用node js将数据从前端发送到后端
- ios - 如何在 Swift 中延迟几秒钟