typescript 检查Angular对象的类型,该对象也可以是未定义的

c90pui9n  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(147)

我正在学习Angular,我想写一个方法,如果对象的类型是Dog(它有一个woof属性),则返回true
这是我到目前为止所拥有的:

export class SomeClass {
   public animal?: Dog | Cat;
   ...
   public isDog() {
    return 'woof' in this.animal;  <-- Object is possibly 'undefined'
  }
}

然后我以这种方式显示基于对象类型的内容:

<div *ngIf="isDog(); then dogCardTemplate else catCardTemplate"></div>

我的问题是this.animal可能是未定义的,并出现以下错误:

Object is possibly 'undefined'.

你能帮我用尽可能少的代码行以简单的方式解决这个问题吗?

mbzjlibv

mbzjlibv1#

检查是否正确的方法如下:

export class SomeClass {
   public animal?: Dog | Cat;
   
   public isDog() {
      return  this.animal // check to see if its defined first
           && 'woof' in this.animal; // animal type check later
   }

}

为什么?
既然属性是可选的,我们需要检查它是否被定义,只有在那之后我们才能检查它是否是一只狗。
注意:如果你想检查它是一只猫,你将需要重复未定义的检查。

li9yvcax

li9yvcax2#

我建议你不要直接在html Using setters and getter variables on HTML (angular component)上使用'get'方法
那么如果你100%确定这个动物不能被定义,?可以被移除

public animal: Dog | Cat;

或者关注IDK4real的答案

相关问题