是否有可能让Typescript基于另一个属性的值来知道另一个属性的类型(如果另一个属性具有有限数量的值)。
例如,我有一个这样的类:
type AnimalType = 'dog' | 'cat' | 'fish';
class Animal {
protected data: DogEntity | CatEntity | FishEntity;
protected type: AnimalType;
constructor(type: AnimalType, data: DogEntity | CatEntity | FishEntity) {
this.type = type;
this.data = data;
}
getAge() {
switch(this.type) {
case 'dog':
// Here typescript knows that data is a DogEntity
break;
case 'cat':
// Here typescript knows that data is a CatEntity
break;
...
}
}
}
有没有一种方法可以让Typescript根据type
的值知道data
的类型?类似于:
- 如果
type
==dog
,则data
是DogEntity
- 如果
type
==cat
,则data
是CatEntity
- 如果
type
==fish
,则data
是FishEntity
谢谢!
1条答案
按热度按时间bf1o4zei1#
是的,TypeScript有一种方法可以做到这一点:
另一种解决方案是使用Assert: