Angular 角度接口名称混乱

Angular 角度接口名称混乱,angular,typescript,interface,namespaces,Angular,Typescript,Interface,Namespaces,我使用的API对于同一个实体在上下文方面有不同的字段。例如,如果我得到一个实体列表,我只收到一半的字段,当我通过id得到一个特定实体时,我就得到了完整的字段。此外,当我需要将此实体发送到服务器(创建一个新实体)时,我需要发送另一组字段 对字段使用可选的?登录界面是不合适的,因为对于“getList”,这些字段永远不会出现,因此我不应该在界面等其他情况下误导 因此,对于同一个实体,我有大约3-4个接口(第一个用于保存,第二个用于getList,第三个用于getById,第四个用于作为另一个实体的一

我使用的API对于同一个实体在上下文方面有不同的字段。例如,如果我得到一个实体列表,我只收到一半的字段,当我通过id得到一个特定实体时,我就得到了完整的字段。此外,当我需要将此实体发送到服务器(创建一个新实体)时,我需要发送另一组字段

对字段使用可选的
登录界面是不合适的,因为对于“getList”,这些字段永远不会出现,因此我不应该在界面等其他情况下误导

因此,对于同一个实体,我有大约3-4个接口(第一个用于保存,第二个用于getList,第三个用于getById,第四个用于作为另一个实体的一部分的该实体,等等)。根据Angular的tslint规则,它不适合使用名称空间(我正在考虑使用的名称空间)

如何以自然的方式构建所有接口,以便于理解和维护?

现在,我可以想到
BaseEntityInterface
,它可能是所有常见始终存在字段的核心

然后,
ListEntityInterface扩展了BaseEntityInterface
,它将具有附加属性等等。但是,这会导致非直观的长名称

对于那些想说不建议使用
interface
后缀或
I
前缀的人,我想指出这是一个步骤,因为这些实体可能存在类(它们有自己的方法,这些方法只在自己的上下文中使用,当实体被传递给某个方法时,它们通常不是此类的实例)


更新#1 例如,我们有一个雇员实体

基本接口(我们可以在所有接口中重用的接口)如下所示

export interface BaseEmployeeInterface {
  id: string;
  name: string;
  age: number;
  gender: string;
}
现在,当您尝试获取员工(id)时

但是,如果访问getEmployeeList,就会收到
GetEmployeeListResponse[]

export interface GetEmployeeListResponse extends GetEmployeeResponse {
  extra: ExtraDataShort; // some essential parts of a large object data
  // and some other props
}
现在,如果访问getGuestList,就会收到
getGuestList[]

export interface GetGuestList {
  name: string;
  items: ItemList[];
  ref: Omit<GetEmployeeListResponse, ...>; // All but some props
}
导出接口GetGuestList{
名称:字符串;
项目:项目列表[];
ref:Omit;//除了一些道具以外的所有道具
}
现在收到的员工实体数据至少有4种变体,并且不受此数字的限制。如果我需要声明用于创建Eployee实体的接口,则会出现第5种类型

在这里,当我使用
ref:Omit
时,我需要记住这个类型声明,或者创建另一个类型来重用这个接口

另外,我想提到的是,这种情况非常简单,因为在我的应用程序中,接口大约大5倍


另外,至少还有两个实体端点,其中包括员工实体数据的某些部分,这是4个端点(每个端点1个用于列表,1个用于获取*(id))

考虑使用一些实用程序类型。根据您的用例选择|部分|忽略spring。如果您能给出一些接口示例,可以尝试给出更详细的示例suggestion@c_ogoo你建议的事情与我正在做的相反,但是如果我想在其他地方重用这些接口,我必须声明它们,因此“污染”全球界面我不确定我是否在关注,你能分享一些界面定义吗?@c_ogo我会分享later@c_ogoo更新问题
export interface GetGuestList {
  name: string;
  items: ItemList[];
  ref: Omit<GetEmployeeListResponse, ...>; // All but some props
}