为辅助函数声明'this'值

时间:2018-03-17 00:29:43

标签: node.js typescript typescript2.0 tsc

我有一个班级:

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的实例?

(我使用辅助函数的原因是创建真正的私有方法)。

2 个答案:

答案 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);
    }

}