【问题标题】:Fail to use switch statement based on typeof object使用基于 typeof 对象的 switch 语句失败
【发布时间】:2016-12-05 14:49:10
【问题描述】:

在我的 html 中,我使用函数调用 getObjInfo(oBJ) 并将对象传递给它。现在我在getObjInfo func 中有 switch 语句,可以根据 html 传递的 obj 的类型返回一些东西,它看起来像这样(Cars、People、Animals 是接口):

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>

我没有收到任何错误,它只是工作......我做错了什么......?

【问题讨论】:

  • CarsPeopleAnimals 是什么?接口、类?
  • 在 TypeScript 中,接口仅静态存在,但在构建为 JS 时不会保留。如果CarsPeopleAnimals 实际上是接口,则预计将不起作用。
  • @NitzanTomer 它们是接口,抱歉没有说
  • @GünterZöchbauer 它们是接口,我该如何让它工作?
  • 将它们更改为类。

标签: angularjs html typescript angular


【解决方案1】:

如果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 来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2021-07-19
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多