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

uemypmqf  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(208)

在monorepo中,我有两个模块,ModuleA和ModuleB。在ModuleB中,我想使用ModuleA中的类型,但实际上从不导入任何值。这是因为ModuleB可能没有与ModuleA捆绑在一起,所以它不应该在运行时从它导入任何东西(实际上,ModuleA可能在运行时不存在)。根据我的理解,这就是import type ...语法的目的,它只导入编译时类型,而在运行时不做任何事情。
如何将Typescript配置为只允许从ModuleA导入编译时类型,这样就不会在编译后的JavaScript中导入它?
在我的tsconfig中,我现在有这个:

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

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

hlswsv35

hlswsv351#

很抱歉,您要访问的页面不存在。关于导入的发射有一些相关的设置,例如verbatimModuleSyntax(如果没有写为类型导入,则保留导入),importsNotUsedAsValuespreserveValueImports(防止tsc删除看起来未使用的导入),isolatedModules(帮助使代码在不同的编译器中工作),但这些都没有做到你想要的。
您可以编写一个脚本来检查您从该模块的所有导入是否使用了类型导入,然后(如果您使用的是Git)在pre-commit钩子中使用该脚本。

相关问题