无法使用基于typeof对象的switch语句

时间:2016-07-31 11:07:23

标签: html angularjs html5 typescript angular

在我的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>

我没有得到任何错误,它只是在起作用......我做错了什么......?

1 个答案:

答案 0 :(得分:4)

如果CarsPeopleAnimals是接口,则无法使用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执行此操作。