Node.js Typescript:从包中导入类型,而不依赖于同一包中的其他类型
我有一个用Typescript编写的NPM包(我们称之为Node.js Typescript:从包中导入类型,而不依赖于同一包中的其他类型,node.js,typescript,import,Node.js,Typescript,Import,我有一个用Typescript编写的NPM包(我们称之为libd),它提供了一些类和类型。它们导出到index.ts文件中,如下所示: export { ClassA } from "./ClassA"; export { TypeB } from "./TypeB"; { "compilerOptions": { "target": "ES2019", "module": "commonjs", "declaration": true, "outDir"
libd
),它提供了一些类和类型。它们导出到index.ts
文件中,如下所示:
export { ClassA } from "./ClassA";
export { TypeB } from "./TypeB";
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"declaration": true,
"outDir": "dist",
"rootDir": "src",
"inlineSources": true,
"inlineSourceMap": true
}
}
import { TypeB } from "libd";
ClassA
正在使用一个外部依赖项(我们称之为depc
),该依赖项在package.json
中设置为peerDependencies。TypeB
只是一个没有任何外部依赖关系的类型
在package.json
中,主字段设置为dist/index.js
(它被传输到的位置),类型设置为dist/index.d.ts
libd
包的tsconfig.json
如下所示:
export { ClassA } from "./ClassA";
export { TypeB } from "./TypeB";
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"declaration": true,
"outDir": "dist",
"rootDir": "src",
"inlineSources": true,
"inlineSourceMap": true
}
}
import { TypeB } from "libd";
现在我在另一个库中使用TypeB
(我们称之为libe
),而不导入ClassA
,也不安装depc
依赖项。libd
库通过NPM安装,导入类型如下:
export { ClassA } from "./ClassA";
export { TypeB } from "./TypeB";
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"declaration": true,
"outDir": "dist",
"rootDir": "src",
"inlineSources": true,
"inlineSourceMap": true
}
}
import { TypeB } from "libd";
libe
的tsconfig.json
与libd
中的类似
传输这会导致错误TS2307:找不到模块“depc”
现在我明白了,如果我要使用ClassA
,我必须安装depc
,因为它导入了它。但我只使用了不需要任何依赖项的TypeB
,有时类型会随原始包一起提供
我可以通过安装@types/depc
来解决这个问题,Typescript会很高兴的。代码应该在运行时工作,因为depc
的实际用法不是来自libe
。但我宁愿不安装无用的软件包
在libe
的tsconfig.json
中设置“skipLibCheck”:true
也会修复tsc错误,但我不确定这会产生什么负面影响
所以我的问题是:为什么typescript要检查我没有导入的依赖项中的类?是吗,因为我已经将libd
包的所有导出捆绑在index.ts
文件中,并且这些导出的所有导入都通过这个索引文件进行
我可以在不将TypeB
和ClassA
分为不同包的情况下解决此问题吗?这将使它们成为非常小的软件包,在大约80%的时间里,它们都会被安装