You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何修复unknown类型不能用作索引类型的报错

报错原因

你遇到的类型报错是因为randomUniqueDenominators方法中创建的Set没有声明泛型类型,TypeScript无法推断出Set内存储的值是number类型的数组索引,默认会将Set元素判定为unknown类型,而数组索引仅支持number、string、symbol类型,因此会抛出type unknown cannot be used as an index type错误。

修复方案

方案1:从方法源头完善类型(推荐)

给Set添加number泛型声明,同时明确方法的返回值类型为Set<number>,这样TypeScript可以自动推断后续转换得到的数组元素为number类型,你的原有业务代码不需要额外修改即可正常运行:

static randomUniqueDenominators(denominators: number[], count: number): Set<number> {
    // 声明Set存储的元素为number类型
    let nums = new Set<number>();
    let numerator = 0;

    while (nums.size < count) {
        numerator = Math.floor(Math.random() * denominators.length);
        nums.add(numerator);
    }
    return nums;
}

方案2:直接遍历Set(可选优化)

ES6+的Set本身是可迭代对象,不需要转成数组也可以直接遍历,能省一步转换操作:

const chosenDenominatorSet = MyLogic.randomUniqueDenominators(denominators, 3);
for (const index of chosenDenominatorSet) {
    console.log(denominators[index])
}

临时应急方案

如果暂时不方便修改方法定义,可以用类型断言手动指定元素类型,仅作为临时方案使用,不推荐长期依赖:

console.log(denominators[chosenDenominators[i] as number])

内容的提问来源于stack exchange,提问作者Amine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:06