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

如何配置tsconfig让TypeScript编译时禁止目录导入以匹配Node LTS?

问题

开发中使用TypeScript搭配tsm,希望构建时遵循当前Node LTS版本默认的模块解析规则——禁止直接导入目录,要求tsc编译时就能抛出和Node运行时一致的错误,保证行为一致性。

Node运行时遇到目录导入时的错误示例:

@org/repo:dev: node:internal/process/esm_loader:48
@org/repo:dev:       internalBinding('errors').triggerUncaughtException(
@org/repo:dev:                                 ^
@org/repo:dev: Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/Users/jasonkurian/src/github.com/org/repo/apps/jobs/src/workers/sync/transform/tagging' 
is not supported resolving ES modules imported from /Users/jasonkurian/src/github.com/org/repo/apps/jobs/src/workers/sync/transform/transform.ts

触发错误的导入语句:

import { tagging } from './tagging';

正确写法需指定具体文件:

import { tagging } from './tagging/index'; // 或直接导入具体文件名

解决方案

在tsconfig.json中配置以下编译选项,即可让tsc严格遵循Node LTS的模块解析规则,强制执行禁止目录导入的限制:

{
  "compilerOptions": {
    "module": "Node16", // 或 "NodeNext",匹配Node的ES模块系统
    "moduleResolution": "Node16", // 核心配置:严格遵循Node的解析逻辑
    "target": "ES2022", // 匹配当前Node LTS支持的ES版本(如Node 20对应ES2022)
    "strict": true // 可选,开启严格类型检查提升代码质量
  }
}

选项说明:

  • module: "Node16"/NodeNext:让TypeScript生成符合Node.js ES模块规范的代码,同步启用对应的解析规则。
  • moduleResolution: "Node16":这是实现需求的关键。该模式下TypeScript会完全复刻Node.js ES模块的解析算法,当检测到直接导入目录的语句时,会抛出和Node运行时一致的错误,要求开发者显式指定入口文件(如./tagging/index)。

配置完成后,tsc编译时会对import { tagging } from './tagging'这类目录导入语句报错,确保代码在编译阶段就符合Node LTS的运行要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:48:18