let res: number = 0;
interface I {
foo(i: number): number {
return 1;
}
}
interface J extends I {
foo(j: string): number {
return 2;
}
}
class A implements I, J {}
function main(): void {
let a = new A();
assertTrue(a.foo(1.1 as number) === 1);
assertTrue(a.foo("some string") === 2);
}
Этот код должен успешно скомпилироваться, но возникают ошибки:
TypeError: Нет подходящего сигнатурного вызова для `foo("some string")` [test.sts:18:18]
TypeError: Недопустимый тип операнда, типы операндов должны быть числами, тем же перечислением или логическим типом [test.sts:18:18]
TypeError: Тип `"some string"` несовместим с типом `double` в позиции 1 [test.sts:18:24]
Успешная компиляция
С использованием предоставленных примеров
Другие случаи, которые следует решить из тестов ets-cts:
15.semantic_rules/08.overloading_and_overriding/05.overloading_and_overriding_in_interfaces/multiple_interfaces_inheritance_0.sts
15.semantic_rules/08.overloading_and_overriding/05.overloading_and_overriding_in_interfaces/multiple_interfaces_inheritance_2.sts
15.semantic_rules/08.overloading_and_overriding/05.overloading_and_overriding_in_interfaces/two_interfaces_0.sts
15.semantic_rules/08.overloading_and_overriding/05.overloading_and_overriding_in_interfaces/interface_return_value_overload.sts
15.semantic_rules/08.overloading_and_overriding/05.overloading_and_overriding_in_interfaces/interface_return_value_overload_1.sts
Вход Перед тем как оставить комментарий