Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Typescript:从包中导入类型,而不依赖于同一包中的其他类型_Node.js_Typescript_Import - Fatal编程技术网

Node.js Typescript:从包中导入类型,而不依赖于同一包中的其他类型

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"

我有一个用Typescript编写的NPM包(我们称之为
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%的时间里,它们都会被安装