如何为TypeScript辅助函数指定this为Foo类实例类型?
如何让TypeScript识别辅助函数中的this为Foo类实例?
当然可以!TypeScript支持显式指定函数的this类型,刚好能解决你的问题——既让辅助函数helper能正确识别this为Foo类的实例,又能保留它作为外部函数实现“真正私有”的特性。
具体修改方案
只需要给helper函数添加一个伪参数this: Foo(放在参数列表最前面),就能告诉TypeScript这个函数运行时的this上下文是Foo的实例。修改后的代码如下:
// 给helper添加this类型声明,指定this为Foo类实例 const helper = function(this: Foo, val){ console.log(this.a); // 现在TypeScript能识别this.a是Foo的私有成员number类型 console.log(this.b); // 识别this.b是公共成员string类型 this.bar(); // 识别bar是Foo的方法 }; export class Foo { public b = '45' private a = 15; bar(){ } myMethod(){ return helper.apply(this,arguments); } }
关键说明
this: Foo是TypeScript的特殊语法,属于伪参数——编译后这个参数会被移除,不会影响运行时逻辑,只是用来给编译器提供类型信息。- 这样修改后,TypeScript会自动检查
helper中对this的所有访问,确保符合Foo类的成员定义,不会再出现“无法识别this上下文”的报错。 - 由于
helper是类外部的函数,类的外部代码无法直接调用它,完美实现了你想要的“真正私有方法”的效果(毕竟类的private修饰符只是编译时检查,运行时还是能被访问,而外部函数则是真正的外部不可见)。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

