You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置TypeScript仅允许从ModuleA导入编译时类型?

如何配置TypeScript让ModuleB仅导入ModuleA的编译时类型

核心配置方案

1. 启用严格的模块语法检查

在ModuleB的tsconfig.json的compilerOptions中添加以下配置:

{
  "compilerOptions": {
    "verbatimModuleSyntax": true,
    "isolatedModules": true
  }
}
  • verbatimModuleSyntax:强制区分类型导入和值导入。所有仅用于类型的导入必须显式使用import type语法,编译时会自动移除所有import type语句,不会生成到最终的JavaScript文件中。如果误写普通import语句导入类型,TypeScript会直接报错,避免引入运行时依赖。
  • isolatedModules:确保每个模块可独立编译,防止模块间隐式依赖导致的运行时问题,同时强化类型导入的检查逻辑。

2. 保留路径指向并配合语法检查

继续使用你当前的paths配置,结合上述语法检查规则,就能确保仅类型可被导入:

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

该路径指向ModuleA的类型定义文件,TypeScript只会读取其中的类型信息,不会尝试加载运行时代码。

3. 代码层面强制使用类型导入

在ModuleB的代码中,所有从ModuleA获取类型的操作必须使用import type语法:

// 正确:仅导入类型,编译后会被移除
import type { SomeType, InterfaceFromA } from 'ModuleA';

// 错误:若尝试导入值,TypeScript会直接报错(因verbatimModuleSyntax已启用)
import { someFunctionFromA } from 'ModuleA';

额外验证

编译ModuleB后,查看生成的JavaScript文件,确认没有任何import 'ModuleA'或相关导入语句,即可确保运行时完全不依赖ModuleA。

内容的提问来源于stack exchange,提问作者Tacodiva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:12:19