Принцип разделения интерфейсов Проблема, когда один интерфейс наследует два интерфейса, которые имеют одного и того же родителя.
У меня есть приложение со следующими настройками и используемыми типами.
type CompanyFounder {
name: string;
age: number;
salary: number;
sharesHeld: number;
getReasonStartedCompany: string;
};
type NonExecDirector = {
name: string;
age: number;
sharesHeld: number;
string[]: getExternalStuff;
};
Мне было поручено добавить новый тип:
type Person = {
name: string;
age: number;
};
Я решил, что могу улучшить код и уменьшить количество повторяющихся полей в связанных типах, используя принцип разделения интерфейса. Вот что я придумал:
type Person = {
name: string;
age: number;
};
interface Employee extends Person {
salary: number;
}
interface Director extends Person {
sharesHeld: number;
}
interface CompanyFounder extends Director, Employee {
getReasonStartedCompany: string;
}
interface NonExecDirector extends Director {
string[]: getExternalStuff;
}
Однако я думаю, что у меня проблема. Вся система работает так же, как и до изменения, но я просто хочу проверить, есть ли на самом деле способ обойти тот факт, что основатель компании получает
name
а также
age
дважды, потому что он расширяет и Директора, и Сотрудника.
Просто чтобы привлечь людей из разработчиков серверной части / серверной части, вот та же проблема в примере C #
public interface Person {
string GetName();
int GetAge();
}
public interface Employee : Person {
int GetSalary();
}
public interface Director : Person {
int GetSharesHeld();
}
public interface CompanyFounder : Director, Employee {
string GetReasonStartedCompany();
}
public interface NonExecDirector : Director {
string[] GetExternalStuff();
}
Итак, проблема в том, что учредитель компании получает
GetName()
а также
GetAge()
дважды, потому что он реализует и Director, и Employee.
Кто-нибудь может помочь с этой проблемой?
1 ответ
Почему директор не получает зарплату? Директор – это сотрудник, который в свою очередь, естественно, является человеком.
public interface Director : Employee {
int GetSharesHeld();
}
public interface CompanyFounder : Director {
string GetReasonStartedCompany();
}