Jam*_*mes 5 typescript tsconfig monorepo yarnpkg
TypeScript 库 A除了“正常”导出之外还提供类型定义,如下所示:
declare global {
function someGlobalFunction(): void;
}
Run Code Online (Sandbox Code Playgroud)
库 B 使用库 A 的类型定义。因此,在库 B 的 tsconfig.json 中,我们输入:
"types": ["library-a"],
Run Code Online (Sandbox Code Playgroud)
someGlobalFunction不再导致编译器错误。我有一个 TypeScript monorepo。(它使用 NX 作为 monorepo 工具,使用 Yarn 作为包管理器,但这可能并不重要,因为这个问题适用于任何类型的 TypeScript monorepo。)
如果库 A 和库 B 都在我的 monorepo 中,我如何复制第 1 部分中的设置?
首先,monorepo 使用pathstsconfig.json 文件中的字段,以便包可以相互导入,而无需实际安装它们。这很简单,而且效果很好。然而,如果我们使用该字段,它就会崩溃types,因为paths和types似乎没有被编程为一起工作。具体来说:
"types": ["library-a"]像以前一样指定,TypeScript 找不到它,说library-a找不到。typeRoots字段来指向正确的“dist”目录,那么我可以克服该错误,但对于所有单个符号仍然会出现一堆“未找到”错误。library-a直接安装,那么一切都会正常,但这样做首先就违背了使用 monorepo 的全部意义。包从 monorepo 中的另一个包导入类型的正确方法是什么?
如果需要,我可以提供一个最小的 reprex 存储库来说明问题。
我成功地使用以下方法达到了您想要的library-b结果tsconfig.json:
{
"compilerOptions": {
"types": ["../library-a"],
"typeRoots": ["../library-a/types"],
"paths": {
"library-a": ["../library-a/index.ts"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/Maxim-Mazurok/ts-2libs以获取完整复制。
如果我弄错了 - 请分叉它或提供您自己的重现。
| 归档时间: |
|
| 查看次数: |
1650 次 |
| 最近记录: |