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

如何将TypeScript interface传递给自定义命令及相关实现问题

1. 开发阶段类型导入测试方案

  • 可以在本地开发目录用npm link或者pnpm link把你的CLI包链接到全局,再在测试脚本的项目里执行npm link myCommand,就能直接用和生产环境一致的导入语句引入类型定义,不需要修改导入路径。
  • 也可以在测试用的tsconfig.json里配置compilerOptions.paths,把myCommand/types直接映射到你本地开发的类型文件路径,省去link的步骤,更适合快速迭代调试。
  • 临时快速测试可以在脚本顶部加三斜线指令/// <reference path="../your-local-path/types/index.d.ts" />直接引用本地类型文件,不需要走node_modules导入。

2. 脚本内部触发tsc执行的方法

  • 直接调用TypeScript官方提供的API即可,安装typescript包后导入ts模块,调用ts.transpile()或者ts.transpileModule()方法可以直接对单文件TS代码做内存转译,不需要生成中间文件,刚好匹配你即时转译的需求。
  • 如果需要走完整的tsconfig配置编译,可以调用ts.createProgram()创建编译实例,再执行program.emit()完成编译,支持自定义编译输出路径、是否生成d.ts等配置。
  • 不需要定制编译逻辑的简单场景,可以用child_process模块的exec或者spawn方法直接调用tsc命令行,参数和平时用命令行执行tsc完全一致。

3. 转译产物存储最佳实践

  • 优先选择内存存储:如果不需要持久化转译后的JS文件,直接用内存转译后执行,完全不写入磁盘,不会产生垃圾文件,esbuild、swc这类转译工具都支持直接返回内存中的转译结果。
  • 必须落盘的话优先存放在系统临时目录:用os.tmpdir()获取系统临时目录,在下面创建你CLI专属的子目录存放转译产物,程序退出或者下次启动时自动清理该目录即可,不会污染用户的项目目录。
  • 如果需要缓存转译产物提升二次执行速度,可以在用户项目的node_modules/.cache下创建你的CLI专属缓存目录,给转译产物按文件内容哈希命名,执行前先校验哈希是否匹配,匹配的话直接用缓存的JS文件,不用重复转译。

同类参考项目

  • tsx:支持直接执行TS文件,内置即时转译,无额外生成文件,底层用esbuild做转译性能很高,可参考它的转译和执行逻辑。
  • vite:插件体系支持TS编写的配置文件,内置即时转译逻辑,可参考它处理自定义TS配置文件的类型注入和转译流程。
  • ts-node:老牌TS即时执行工具,支持完整的tsconfig配置适配,可参考它的类型加载和转译缓存实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:06