接口,其属性具有变化的接口

时间:2018-10-24 15:27:53

标签: angular typescript web ecmascript-6

首先,是我的堆叠闪电战的链接:https://stackblitz.com/edit/angular-hnfgcx

我也在stackblitz中也对我的问题进行了更详细的技术描述,因此请阅读以下内容进行澄清:)

所以标题可能有些混乱,但是让我尝试详细说明。

我有一个用于“项目”的基本界面,该界面具有2个属性:

id-唯一标识符 item-多种类型(CarInterface或HouseInterface)

但是,当我尝试访问CarInterface或HouseInterface的属性时,无法识别类型。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

在您的示例中,listOfCars键入为ItemInterface[],其定义如下:

export interface ItemInterface {
  id: number;
  item: CarInterface | HouseInterface;
}

TypeScript仅知道item将是CarInterfaceHouseInterface,但不知道哪个。因此,您必须执行以下操作:

const value = this.listOfCars.find(entry => (<CarInterface>entry.item).color === 'green');

这种设计似乎有些奇怪。看起来您不需要将汽车和房屋混合在同一列表中或类似的列表中,因此可能不必输入相同的名称。您确定不需要通用接口吗?像这样:

export interface ItemInterface<T> {
  id: number;
  item: T;
} 

public listOfCars: ItemInterface<CarInterface>[] = [];

或者其他接口扩展的ItemInterface

export interface ItemInterface {
  id: number;
} 

export interface CarInterface extends ItemInterface {
  color: string;
  doors: number;
} 

export interface HouseInterface extends ItemInterface {
  rooms: number;
  squareMeters: number;
}