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

为什么使用ts-node运行脚本时for..in无法遍历出类的原型方法?

问题核心原因

这个差异是tsc传文件参数时默认不加载tsconfig配置,和不同ECMAScript版本中类方法的可枚举性规则不同两个点共同导致的:

  1. 你执行tsc ./src/repro.ts时,只要给tsc命令传入了具体的文件路径,tsc就会忽略项目中的tsconfig.json,使用默认配置编译。tsc 4.3.5的默认编译target是ES3,会把类语法转译为ES5风格的构造函数实现,原型上的do方法是直接赋值给P.prototype的,这种方式定义的属性默认是可枚举的,for...in循环会遍历到原型链上的可枚举属性,所以会输出do。
  2. ts-node执行时默认会读取项目的tsconfig.json,你配置的target是ES6(ES2015),ES2015规范中,class内部定义的方法默认是不可枚举的,for...in不会遍历到不可枚举的属性,所以只会输出for in:。

你可以做两个验证确认这个结论:

  • 直接执行不带文件参数的tsc命令,让tsc读取tsconfig.json配置进行编译,生成的代码会保留原生class语法,这时候用node执行编译后的js,也不会输出do
  • 执行ts-node --target ES3 ./src/repro.ts,强制指定编译目标为ES3,此时会正常输出do

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:27:00