如何在 TypeScript 中只允许从模块导入类型?

问题描述 投票:0回答:1

在 monorepo 中,我有两个模块,ModuleA 和 ModuleB。在 ModuleB 中,我想使用 ModuleA 中的类型,但从未实际导入任何值。这是因为 ModuleB 可能未与 ModuleA 捆绑在一起,因此它不应在运行时从中导入任何内容(事实上,ModuleA 在运行时可能不存在)。根据我的理解,这就是

import type ...
语法的目的,它只导入编译时类型,但在运行时什么都不做。

如何将 Typescript 配置为仅允许从 ModuleA 导入编译时类型,以便它永远不会在编译的 JavaScript 中导入?

在我的 tsconfig 我目前有这个:

"paths": {
  "ModuleA": [
    "../node_modules/ModuleA/dist/esm/index.d.ts"
  ]
}

但这显然允许导入任何东西,包括运行时值。

typescript tsconfig
1个回答
0
投票

根据我对 tsconfig 设置的了解,您要查找的内容不存在。有关于导入排放的相关设置,例如

verbatimModuleSyntax
(如果不写为类型导入,则保留导入),
importsNotUsedAsValues
preserveValueImports
(防止tsc删除看起来未使用的导入),
isolatedModules
(帮助使代码跨不同的编译器工作),但没有一个能满足您的需求。

您可以编写一个脚本来检查您从该模块的所有导入是否使用类型导入,然后(如果您使用的是 Git,)在预提交挂钩中使用该脚本。

© www.soinside.com 2019 - 2024. All rights reserved.