0

我有一个简单的例子:

interface IDog {
  bark: void;
  type: 'dog';
}
interface ICat {
  meow: void;
  type: 'cat';
}
type IAnimalType = 'cat' | 'dog';
type IAnimal = IDog | ICat;

class ContainsAnimal {
  animalType: IAnimalType;
  animal: IAnimal;

  sound() {
    if (this.animalType === 'dog') { this.animal.bark(); }
  }
}

这不会编译,因为编译器不知道这animalType === 'dog'意味着type of animal === IDog(并且bark不存在于ICat)。

animal.type有没有一种方法可以限制类 ContainsAnimal 类型,以便animalType始终相互对应?

4

0 回答 0