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.