我有一个简单的例子:
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
始终相互对应?