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

如何通过ts-node运行TypeScript,消除实验警告与导入扩展名问题

问题分析与解决方案

核心结论

ts-node在Yarn 1.x Classic workspace环境下,结合Node.js 23 + TypeScript 5.5确实存在ESM模块解析与实验特性相关的兼容细节问题,以下是针对性解决方法:

1. VS Code导入语句波浪线警告(必须指定.ts扩展名)

这是因为TypeScript模块解析规则与Node.js ESM要求未对齐,加上ts-node的类型剥离特性影响:

  • 修改tsconfig.json的编译选项,对齐Node.js ESM规则:
    {
      "compilerOptions": {
        "module": "nodenext",
        "moduleResolution": "nodenext",
        "allowImportingTsExtensions": true, // 允许导入.ts扩展名
        "noEmit": true // 脚本直接用ts-node运行,无需编译输出
      }
    }
    
  • 确保项目根目录及各workspace的package.json中都设置了"type": "module",统一ESM模块规范。

2. Type Stripping实验特性警告与模块找不到错误

ExperimentalWarning来自ts-node的实验性类型剥离功能,该功能目前不完善,会导致类型导入解析异常:

  • 禁用类型剥离:在ts-node命令中添加--no-type-stripping参数,或在tsconfig.json中配置:
    {
      "ts-node": {
        "typeStripping": false,
        "esm": true
      }
    }
    
  • 规范类型导入语法:所有纯类型导入使用import type,避免被ts-node误识别为普通模块:
    // 错误写法
    import { Glyph, FontUtils } from './types';
    
    // 正确写法
    import type { Glyph } from './types';
    import { FontUtils } from './types';
    

3. Yarn Workspace兼容优化

Yarn 1.x对ESM的支持有限,可尝试以下优化:

  • 运行ts-node时使用项目本地依赖:用yarn ts-node替代全局ts-node,避免路径解析混乱。
  • 若问题持续,考虑升级到Yarn Berry(2.x+),其对ESM和workspace的支持更完善。
  • 升级ts-node到最新稳定版:当前使用的10.9.2发布于2023年,新版本对Node.js 20+的兼容性更好。

验证命令示例

修改后的Yarn脚本命令:

yarn ts-node --project path/tsconfig.json --esm --no-type-stripping path/script.ts <args-to-script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:42:03