TypeScript discriminating union - discrimating属性类型的参数

时间:2018-04-11 17:22:49

标签: typescript

我有以下定义:

POST

现在我想创建一个使用[{id: 1, name: 'max'}, {id: 2, name: 'jhon'}, {id: 3, name: 'anna'}] 作为参数的函数:

interface Dog {
  bark(): void;
  type: 'dog';
}

interface Cat {
  meow(): void;
  type: 'cat';
}

type Animal = Cat | Dog;

在此示例中,我使用了Animal.type,但我的意思是function useAnimalType(type: string) {} 。我意识到我可以写出所有可能string的{​​{1}},但想象一下'cat' | 'dog'中定义了数百种动物类型的情景。如何在此处重复使用type作为参数?

1 个答案:

答案 0 :(得分:12)

您可以使用括号表示法检索其他对象类型中的字段类型。举个例子,简单地说:

function useAnimalType(type: Animal["type"]) {}

就足够了。在这种情况下,Animal["type"]被推断为"cat" | "dog"