如何解决输入带有枚举索引的安全数组
有没有办法告诉Typescript我有一个将由给定数值枚举索引的数组?例如,我可能有以下代码:
enum Animals {
dog,bear,cat,}
const animalColours: string[] = [
"black","brown","white",];
但是,如果我添加了额外的动物类型,我很容易忘记更新animalColours
,这会导致运行时错误。一种改进是使用Record
:
enum Animals {
dog,}
const animalColours: Record<Animals,string> = {
[Animals.dog]: "black",[Animals.bear]: "brown",[Animals.cat]: "white",};
Typescript然后将检测我是否错过任何变体。但是,由于各种原因,我不想使用Record
,因为我不会在这里讨论。有什么方法可以通过数组实现相同的目的吗?我能想到的最好的办法是在运行时转换Record
,但这很麻烦,因为它具有运行时成本,尤其是因为您必须对它们进行排序(不能保证迭代顺序)。
const animalColoursRecord: Record<Animals,};
// In fact this doesn't even work because Object.entries() always returns
// [string; string][].
const animalColours: string[] = Object.entries(animalColoursRecord).sort((a,b) => a[0] > b[0]).map(x => x[1])
这也意味着Typescript不会抱怨animalColours[10]
。
是否可以使用数组来获得Record<T,U>
的类型安全性?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。