Слияние кода завершено, страница обновится автоматически
Следующий код не работает так, как ожидалось:
let res: number = 0;
class Base<T, S> {
foo() { res = 100 + 1; }
static foo() { res = 300 + 1; }
}
class Derived<T, S> extends Base<T, S> {
foo() {
res = 200 + 1;
}
}
class Derived2 extends Base<Object, Number> {
foo() {
res = 200 + 1;
}
}
function main(): void {
// НЕПРАВИЛЬНО: call.virt.short Derived.foo:(Derived), v0
Derived.foo(); // вызов статического метода базового класса
assertEQ(res, 300 + 1);
// ПРАВИЛЬНО: call.short <static> Base.foo:()
Derived2.foo(); // вызов статического метода базового класса
assertEQ(res, 300 + 1);
}
Компилироваться и запускаться без ошибок.
test.sts:
let res: number = 0;
class Base<T, S> {
foo() { res = 100 + 1; }
static foo() { res = 300 + 1; }
}
class Derived<T, S> extends Base<T, S> {
foo() {
res = 200 + 1;
}
}
class Derived2 extends Base<Object, Number> {
foo() {
res = 200 + 1;
}
}
function main(): void {
// НЕПРАВИЛЬНО: call.virt.short Derived.foo:(Derived), v0
Derived.foo(); // вызов статического метода базового класса
assertEQ(res, 300 + 1);
// ПРАВИЛЬНО: call.short <static> Base.foo:()
Derived2.foo(); // вызов статического метода базового класса
assertEQ(res, 300 + 1);
}
./es2panda ./test.sts
Вход Перед тем как оставить комментарий