我想我在这里寻找一种设计模式。这就是我所拥有的-
IApp.ts
export interface IApp {
platform: PlatformEnum;
version: string;
islive: boolean;
title: string;
iconurl: string;
}
IAppleApp.ts
export interface IAppleApp extends IApp {
buildversion: string;
versionstatus: string;
sku: boolean;
category: string;
accountid: string;
}
IAndroidApp.ts
export interface IAndroidApp extends IApp {
versioncodes: string;
track: string;
rolloutpercentage: boolean;
acccountname: string;
}
相当简单的模型来表示传入的数据,没什么花哨的。
现在,我有一个服务可以进行API调用,并以IApp
的形式获取数据。
apps.service.ts
appVersion: IApp;
appiOSVersion: IAppleApp;
appAndroidVersion: IAndroidApp;
if (this.appVersion.platform === PlatformEnum.ios) {
this.appiOSVersion = this.appVersion as IAppleApp;
} else if (this.appVersion.platorm === PlatformEnum.android) {
this.appAndroidVersion = this.appVersion as IAndroidApp;
}
然后我在appsService.appiOSVersion
组件中使用Apple
,在appsService.appAndroidVersion
组件中使用Android
。 Apple
和Android
组件都有不同的逻辑。我尝试在每个组件中使用appsService.appVersion
,但是由于它是基本IApp
类型,因此该对象不具有特定于平台的属性。因此必须使用两个不同的变量。
我的问题:是否可以在appsService.appVersion
和Apple
组件中重用Android
? (为了状态管理,我需要将此变量放在apps.service.ts
中)。有两个不同的变量并不疯狂,对吧?
抱歉,如果这没有道理。如果您需要更多详细信息,请告诉我。
非常感谢!
答案 0 :(得分:1)
在什么时候设置this.appVersion.platform
变量?您可以使用appService
之类的泛型来参数化appsService.fetch<T>
的fetch调用,并在调用时使用平台特定的接口对其进行参数化吗?
这样,如果您执行以下操作:
appService.fetch<IAppleApp>(...)
您可以将返回类型设为通用T
并访问该接口的结构。