打字稿 - 具有数据模型接口的多态性



我想我在这里寻找一种设计模式。这是我所拥有的——

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;
}

然后我在Apple组件中使用appsService.appiOSVersionAndroid组件中使用appsService.appAndroidVersionAppleAndroid组件具有不同的逻辑。我尝试在每个组件中使用appsService.appVersion,但由于它是基本IApp类型,因此该对象没有特定于平台的属性;所以必须使用两个不同的变量。

我的问题:是否可以在AppleAndroid组件中重复使用appsService.appVersion?(我需要这个变量apps.service.ts用于状态管理)。拥有两个不同的变量并不疯狂,对吧?

如果这没有意义,请道歉。如果您需要更多详细信息,请告诉我。

提前非常感谢!

你在什么时候设置this.appVersion.platform变量?您能否使用像appsService.fetch<T>这样的泛型参数化appService的获取调用,并在调用它时,使用特定于平台的接口对其进行参数化?

这样,如果您执行以下操作:appService.fetch<IAppleApp>(...)您可以将返回类型设置为泛型T并访问该接口的结构。

最新更新