我有一个简单的例子:
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
)。
有没有办法可以限制类ContainsAnimal类型,以便animal.type
和animalType
始终相互对应?