angularjs - Zlyhanie pri použití príkazu switch na základe typu objektu
v mojom HTML používam funkciu na volanie getObjInfo(oBJ) a odovzdávam jej objekt. teraz mám vo funkcii getObjInfo prípadový výber (switch), ktorý má vrátiť niečo na základe typu objektu, ktorý bol odovzdaný z HTML, vyzerá to takto (Cars, People, Animals sú rozhrania):
public getObjInfo(elem: Cars | People | Animals) {
switch (typeof(elem)) {
case 'Cars':
return elem.color;
case 'People':
return elem.age;
case 'Animals':
return elem.name;
}
}
toto je HTML, ktoré to spúšťa:
<div class="list-bg" *ngFor="#obj of listToDisplay">
{{getObjInfo(obj)}}
</div>
nedostávam žiadne chyby, len to nefunguje...čo robím zle..?
Odpoveď č. 1
Ak sú Cars, People a Animals rozhrania, potom to nemôžete urobiť pomocou typeof, pretože tieto rozhrania existujú iba počas kompilácie a počas behu programu sú neprítomné.
Môžete mať funkciu, ktorá kontroluje vlastnosti elem a vracia jeho typ:
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"
}
A potom:
public getObjInfo(elem: Cars | People | Animals) {
switch (getElementType(elem)) {
case 'Cars':
return elem.color;
case 'People':
return elem.age;
case 'Animals':
return elem.name;
}
}
Avšak, ak tieto rozhrania premeníte na triedy, budete to môcť robiť pomocou instanceof.
