在我的html中使用函数来调用getObjInfo(oBJ)
并且我将它传递给对象。现在我在我的getObjInfo
func中有switch语句返回基于html传递的obj类型的东西,看起来像这样(汽车,人物,动物都是接口):
public getObjInfo(elem: Cars | People | Animals) {
switch (typeof(elem)) {
case 'Cars':
return elem.color;
case 'People':
return elem.age;
case 'Animals':
return elem.name;
}
}
这是传递它的html:
<div class="list-bg" *ngFor="#obj of listToDisplay">
{{getObjInfo(obj)}}
</div>
我没有得到任何错误,它只是在起作用......我做错了什么......?
答案 0 :(得分:4)
如果Cars
,People
和Animals
是接口,则无法使用typeof
执行此操作,因为这些接口仅在编译时存在且在运行时不存在。
您可以使用一个检查elem
属性的函数并返回类型:
function getElementType(elem: Cars | People | Animals) {
if (elem.carProperty1 && elem.carProperty2) {
return "Cars";
}
if (elem.peopleProperty1 && elem.peopleProperty2) {
return "People";
}
if (elem.animalsProperty1 && elem.animalsProperty2) {
return "Animals";
}
return "unknown"
}
然后:
public getObjInfo(elem: Cars | People | Animals) {
switch (getElementType(elem)) {
case 'Cars':
return elem.color;
case 'People':
return elem.age;
case 'Animals':
return elem.name;
}
}
但是,如果您将这些界面转换为类,您将能够使用instanceof
执行此操作。