首先,是我的堆叠闪电战的链接:https://stackblitz.com/edit/angular-hnfgcx
我也在stackblitz中也对我的问题进行了更详细的技术描述,因此请阅读以下内容进行澄清:)
所以标题可能有些混乱,但是让我尝试详细说明。
我有一个用于“项目”的基本界面,该界面具有2个属性:
id-唯一标识符 item-多种类型(CarInterface或HouseInterface)
但是,当我尝试访问CarInterface或HouseInterface的属性时,无法识别类型。
感谢您的时间!
答案 0 :(得分:1)
在您的示例中,listOfCars
键入为ItemInterface[]
,其定义如下:
export interface ItemInterface {
id: number;
item: CarInterface | HouseInterface;
}
TypeScript仅知道item
将是CarInterface
或HouseInterface
,但不知道哪个。因此,您必须执行以下操作:
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;
}