首页 > 解决方案 > 基于接口静态属性的类型

问题描述

我有多个接口,它们都有一个名为的专有性id,这是每个接口的唯一静态字符串。

例如:

interface Cat{
  id: 'cat',
  furColor: string,
  likeMice: boolean,
}

interface Dog {
  id: 'dog',
  watchDogSkillLevel: number
}

然后我有另一个接口,它需要成为上述接口的 id 之一。我知道我可以使用string,但如果可能的话,我想使用 TypeScript 类型检查。

interface Toy {
  forAnimal: string, // <- how to restrict this to id of either Dog or Cat
}

我也知道我可以简单地说forAnimal:'cat' | 'dog' ,但是如果我有 100 个动物接口,我需要一个一个地写吗?有没有更好的办法 ?

标签: typescript

解决方案


我建议您使用枚举来定义所有可能的动物。您必须将它们全部指定一次,然后您就可以在这两种情况下使用它。

例如像这样:

enum Animal {
   cat = 'cat',
   dog = 'dog'
}

interface Cat{
  id: Animal.cat,
  furColor: string,
  likeMice: boolean,
}

interface Dog {
  id: Animal.dog,
  watchDogSkillLevel: number
}

interface Toy {
  forAnimal: Animal // can be dog or cat
}

推荐阅读