我想使用rex-tils Enum
(有点类似于String literal type)作为discriminated union的判别。
换句话说,考虑以下(简化的)示例,我想让Animal
类型知道name
应该是AnimalType
(而不是{{1 }}):
string
我期望我能做:
type AnimalName = "cat" | "dog"
type Cat = {
name: "cat"
meows: true
}
type Dog = {
name: "dog"
barks: true
}
type Animal = Cat | Dog
const scream = (animal: Animal) => {
if (animal.name === "cat") {
return animal.meows;
} else {
return animal.barks;
}
}
但是出现以下错误:
type Cat = {
name: AnimalName['cat']
}
有什么办法可以做到这一点?
Cf。 TypeScript游乐场here