Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08
Анализатор обнаружил, что метод не переопределяет метод базового класса и не реализует метод интерфейса, хотя их сигнатуры очень похожи.
Рассмотрим пример:
class ClassA {
public receiveArguments(arg1: string, arg2: number): void {
// ....
}
// ....
}
class ClassB extends ClassA {
recieveArguments(arg1: string, arg2: number): void { // <=
// ....
}
// ....
}
В приведённом примере при переопределении метода receiveArguments в классе ClassB была допущена опечатка в названии метода. Из-за этой опечатки переопределения метода не произойдёт.
Исправленный вариант:
class ClassB extends ClassA {
receiveArguments(arg1: string, arg2: number): void {
....
}
}
Для защиты от ошибок переопределения метода в TypeScript можно воспользоваться ключевым словом override:
class ClassB extends ClassA {
override receiveArguments(arg1: string, arg2: number): void {
// ....
}
}
Если декларация содержит ключевое слово override, но никакой метод не переопределяется, то компилятор сообщит об ошибке, и программа не скомпилируется. Также есть возможность в tsconfig.json добавить настройку компилятора noImplicitOverride, чтобы в случае переопределения ключевое слово override было обязательным:
{
"compilerOptions": {
"noImplicitOverride": true
}
}
Для предотвращения такой ошибки в JavaScript можно использовать аннотацию @override в JSDoc для маркировки переопределения методов. Тогда, в случае переопределения несуществующего метода, инструментами разработки будут сгенерированы специальные предупреждения.
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: