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

如何添加索引签名让字符串可作为TypeScript对象的索引属性?

问题原因

这个报错的核心原因是 current 字段被定义为了宽泛的string类型,TypeScript无法保证这个字符串一定是list对象上存在的合法键,因此用它作为索引取值时会触发隐式any的校验报错。

解决方案

方案1:调整类型定义(更推荐,从根源约束类型合法性)

首先限定current的取值范围只能是list的合法键,同时给list添加索引签名,代码修改如下:

// 先定义list允许的键的联合类型
type ListValidKey = 'itmesA' | 'itmesB'

export interface StateInterface {
  list: {
    current: ListValidKey; // 不再用宽泛的string,限定current只能是两个合法键之一
    itmesA: string[];
    itmesB: string[];
    // 添加索引签名,声明string类型的键对应的值类型
    [key: string]: string[] | ListValidKey;
  };
}

修改完成后current天然就是合法的索引类型,你原来的取值代码let showItems = context.list[context.list.current][0];可以正常运行,不会再触发报错。

方案2:临时类型断言(适合快速修复场景)

如果不想改动原有接口定义,也可以在取值时添加类型断言,主动告诉TypeScript你确定current是list的合法键:

let showItems = context.list[context.list.current as keyof StateInterface['list']][0];

补充说明:你示例代码里的键名itmesA、itmesB是拼写错误,正确拼写应为itemsA、itemsB,建议同步修正避免后续取值出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:06