如何编写TypeScript代码使其编译后输出指定结构的ES5代码
解决方案
你需要将otherFunction从类成员改为类闭包作用域内的私有辅助函数,不要将其定义为类的属性/方法,对应的TypeScript写法如下:
const Test = (() => { // 仅内部可访问的辅助函数,不会挂载到类原型或实例上 function otherFunction() {} class Test { method() { // 直接调用,无需加this前缀 otherFunction(); } } return Test; })();
上述代码编译为ES5后,输出结构和你预期的完全一致。
原理解释
你最初的写法将otherFunction定义为类的实例成员,TypeScript编译时会默认将所有类实例成员挂载到构造函数的prototype属性上,符合类成员的运行时访问逻辑。
如果只需要函数在类内部做辅助逻辑使用、不需要对外暴露也不需要访问实例this,就可以把函数定义在类所在的闭包作用域内,既不会污染外部作用域,也不会额外占用原型的存储空间。
注意:TypeScript中给类方法加private修饰符仅能实现编译期的访问限制,运行时该方法依然会被挂载到原型上,无法实现你要的输出效果。
内容的提问来源于stack exchange,提问作者Pramod Jain
相关产品推荐
相关产品推荐

