typescript - 基于接口静态属性的类型
问题描述
我有多个接口,它们都有一个名为的专有性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 个动物接口,我需要一个一个地写吗?有没有更好的办法 ?
解决方案
我建议您使用枚举来定义所有可能的动物。您必须将它们全部指定一次,然后您就可以在这两种情况下使用它。
例如像这样:
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
}
推荐阅读
- linux - 在查询我的机器上本地运行的 DNS 服务器时,如何让 dig 使用 localhost 以外的源 IP?
- php - 从 URL 中批量删除查询字符串的组件
- java - 如何在 Spring java 中设置存储库?
- python-3.x - JSON 解析 - Python 代码抛出错误
- python - 为什么使用 subprocess.Popen() 调用 grep 比使用 subprocess.check_output() 快得多
- symfony - 如何使用亚马逊报告文件('asin' 标识符......)
- tkinter - 有没有办法在 tkinter Canvas 上重新开始(重置)项目编号?
- python - 如何使用 .apply() 函数中的新列解决讨厌的语法错误
- matlab - 将数据拟合为 cos^2?
- c++ - “int”类型的参数与“int*”类型的参数不兼容