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