我有一个班级:
const helper = function(val){
console.log(this.a);
console.log(this.b);
this.bar();
};
export class Foo {
public b = '45'
private a = 15;
bar(){
}
myMethod(){
return helper.apply(this,arguments);
}
}
问题是,在辅助函数中,它不知道上下文是什么('this'的值是什么)。
有没有办法告诉typescript helper函数中的值是Foo
的实例?
(我使用辅助函数的原因是创建真正的私有方法)。
答案 0 :(得分:1)
尝试在帮助函数之上添加它:
let self: Foo = this as Foo;
// use self instead of this below
或者,您可以使用this
替换其中(this as Foo)
的所有实例。
答案 1 :(得分:1)
您可以通过添加名为this
的额外参数为任何function
声明this
的类型。 this
参数不会发送到Javascript,只是为了编译器能够键入检查代码的好处:
const helper = function(this: Foo, val: number){
console.log(this.a); /// error a is private
console.log(this.b);
this.bar();
};
然而,这不会破坏封装,您仍然无法从类外部访问私有属性,因此除非您在类中创建函数,否则仍会出现上述错误。对于在类中定义的函数,它不会给出错误:
export class Foo {
public b = '45'
private a = 15;
bar() { }
createHelper() {
return function (this: Foo, val: number) {
console.log(this.a);
console.log(this.b);
this.bar();
};
}
myMethod() {
return this.createHelper().apply(this, arguments);
}
}