我有以下目录布局,利用yarn workspaces:
package.json
tsconfig.json
packages/
a/
package.json // contains "name": "a" & "version": "1.0.0"
index.d.ts
b/
package.json
tsconfig.json
src/
index.ts
在packages/b/tsconfig.json
里面有一些非常基本的规则:
{
extends:
compilerOptions: {
rootDir: src,
outDir: build
},
include: [ **/*.ts ]
}
我想要完成的是使用packages/a/index.d.ts
之类的语句导入packages/b/src/index.ts
中import { Foo } from 'a';
中声明的定义。我想将index.d.ts
保留在自己的包中,因为我还有一个使用相同定义的包c
。
如果没有任何修改,上面会抛出一个"未找到的模块:错误:无法解决''"'错误。因此,我尝试了以下方法:
baseUrl: .
和paths: { a: [ ../a/index.d.ts ] }
,现在失败了"模块构建失败:错误:TypeScript编译中缺少/path/to/packages/a/index.d.ts " yarn workspace b add a@1.0.0
,符号链接node_modules/a -> packages/a
。有趣的是,这也导致找不到"模块:错误:无法解决'''",直到我将main: index.d.ts
添加到packages/a/package.json
之后我再次得到"模块构建失败:错误:TypeScript编译中缺少/path/to/packages/a/index.d.ts。" ../../a/index.d.ts
中将include
添加到packages/b/tsconfig.json
,结果仍然相同。我认为这是因为rootDir
以外的文件无法在includes
中引用。rootDir: src
替换为rootDirs: [ src, ../a ]
中的packages/b/tsconfig.json
。结果相同。有没有人知道如何解决这些编译错误或完全避免它们?我想到的唯一策略是在包a
中创建一个.js条目,该条目实现index.d.ts
的接口并将它们作为模块导出,而index.d.ts
声明该模块的定义。但是我宁愿只保留共享的接口,而不是可能因包而不同的实现细节。
答案 0 :(得分:0)
您是否可以避免将.d.ts
文件放在main
的{{1}}字段中,而是将其放入package.json
?
types
package.json
:
a
{
"name": "a",
"version": "1.0.0",
"main": "index.js",
"types": "index.d.ts"
}
中 index.js
:
a
在构建期间,TypeScript应从module.exports = {}
字段拉出以获取接口。您不应该对types
中的rootDir
,include
,baseUrl
等做任何特别的事情。