TypeScript中如何获取字典随机元素并解决number索引报错问题
问题原因
这个报错是因为TypeScript自动推断你定义的dict的键是字面量类型0 | 1 | 2,不是通用的number类型,而Math.random生成的num是宽泛的number类型,TS没办法保证这个数值一定是你dict中存在的键,所以抛出类型错误。
解决方法
方法1:显式声明dict的索引类型,允许任意number作为键
适合字典后续会动态增加数值键的场景:// 声明为键是number、值是string的字典类型 dict: Record<number, string> = { 0: "example 1", 1: "example 2", 2: "example 3" } randomGen() { const num = Math.floor(Math.random() * 3); console.log(this.dict[num]) }方法2:把随机数断言为dict的键类型
如果你确定dict的键就是固定的0、1、2,可以直接对生成的num做类型断言,告诉TS你保证这个值一定是合法的键:dict = { 0: "example 1", 1: "example 2", 2: "example 3" } randomGen() { const num = Math.floor(Math.random() * 3) as keyof typeof this.dict; console.log(this.dict[num]) }方法3:通用写法,不硬编码字典长度和键类型
如果你不想写死长度3,或者你的字典键不是数字类型,推荐直接取字典的value列表再随机取,兼容性更强,后续新增字典元素也不用修改随机逻辑:dict = { 0: "example 1", 1: "example 2", 2: "example 3" } randomGen() { const values = Object.values(this.dict); const randomValue = values[Math.floor(Math.random() * values.length)]; console.log(randomValue); }
内容的提问来源于stack exchange,提问作者bensalerno
相关产品推荐
相关产品推荐

