TypeScript类this类型

在类中存在一种特殊的this类型,它表示当前this值的类型。我们可以在类的非静态成员的类型注解中使用this类型。例如,下例中add()方法和subtract()方法的返回值类型为this类型。第20行,我们可以链式调用add()方法和subtract()方法,因为它们返回的是当前实例对象。示例如下:

class Counter {
    private count: number = 0;

    public add(): this {
        this.count++;
        return this;
    }
    public subtract(): this {
        this.count--;
        return this;
    }

    public getResult(): number {
        return this.count;
    }
 }

 const counter = new Counter();

 console.log(counter
    .add()
    .add()
    .subtract()
    .getResult());

运行结果:

TypeScript类this类型

需要强调的是,this类型是动态的,表示当前this值的类型。当前this值的类型不一定是引用了this类型的那个类,该差别主要体现在类之间有继承关系的时候。示例如下:

class A {
   foo(): this {
       return this;
   }
}

class B extends A {
   bar(): this {
       return this;
   }
}

const b = new B();
const x = b.bar().foo();
//    ~
//    类型为B

此例中,foo方法和bar方法的返回值类型都是this类型,且B继承了A。第14行,通过B类的实例来调用foo方法和bar方法时,返回值类型都是B类的实例类型。

注意,this类型不允许应用于类的静态成员。

class A {
    static a: this;
    //        ~~~~
    //        编译错误! 'this' 类型只能用于类的非静态成员
}

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!