在类中存在一种特殊的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());
运行结果:
需要强调的是,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' 类型只能用于类的非静态成员
}
酷客网相关文章:
评论前必须登录!
注册