如何使用文字类型值作为已区分联合的判别式?

时间:2019-05-02 13:26:12

标签: typescript discriminated-union

我想使用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

0 个答案:

没有答案