以下代码为有效的Javascript。TypeScript并不能理解B中的`this.a`引用并会提示错误。是否有一些类型技巧可以应用于B,以向TypeScript解释运行时情况,并获得类型安全性的好处(例如,如果尝试访问`this.c`则报错)?
const A = {
a: 1,
bar() {
this.a = 10;
},
};
const B = {
b: 2,
f() {
console.log(this.a + this.b);
},
bar() {
super.bar();
console.log(this.a);
},
};
Reflect.setPrototypeOf(B, A);
B.f(); // 3
B.bar(); // 10
const A
上的bar
方法不是类型安全的,this
是any
。 - Adam Jenkinsbar()
函数内的const A
中的this
被编译器推断为{ a: number; bar(): void; }
,而不是any
。 - jcalzany
。 - Adam Jenkins