#typescript #oop
#typescript #ооп
Вопрос:
Мне нужно реализовать некоторое количество интерфейсов (например, IUserAccess).
Все эти интерфейсы наследуют интерфейс IBase, который содержит метод Execute, поэтому я хочу реализовать IBase только один раз.
Вот так:
class IBase{
Execute(data: any): void{
console.log('Execute');
};
interface IUserAccess extends IBase {
CheckPassword(username: string, password: string): boolean;
}
class UserAccess implements IUserAccess{
CheckPassword(username: string, password: string): boolean {
console.log('CheckPassword');
Execute({...});
...
}
}
Но IDE говорит:
>Class 'UserAccess' incorrectly implements interface 'IUserAccess'.
Property 'Execute' is missing in type 'UserAccess' but required in type 'IUserAccess'.
Как я могу решить свою проблему?
Комментарии:
1. Кажется, что когда вы расширяете класс с помощью interface, вы теряете реализацию метода, поэтому вам придется реализовать Execute в классе UserAccess.
2. Но реализация Execute в классе UserAccess — плохое решение для меня, потому что мне нужно реализовать более 20 интерфейсов, каждый из которых имеет один и тот же метод Execute, и я не хочу создавать копию тела Execute для каждой реализации интерфейса
3. Я думаю, вы можете пропустить интерфейс и просто расширить IBase подобным образом
class UserAccess extends IBase
и получить доступ к Execute подобным образомthis.Execute({...})
Ответ №1:
Возможное решение
class IBase{
Execute(data: any): void{
console.log('Execute');
};
}
interface IUserAccess {
CheckPassword(username: string, password: string): boolean;
}
class UserAccess extends IBase implements IUserAccess {
CheckPassword(username: string, password: string) {
console.log('CheckPassword');
this.Execute({...});
...
return true;
}
}