您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

元素隐式具有“任意”类型,因为类型“字符串”的表达式不能用于索引

元素隐式具有“任意”类型,因为类型“字符串”的表达式不能用于索引

发生这种情况是因为您尝试plotOptions使用string 访问属性name。TypeScript理解它name可能具有任何值,不仅是来自的属性名称plotOptions。因此,TypeScript需要向其中添加索引签名plotOptions,因此它知道您可以在中使用任何属性名称plotOptions。但我建议更改的类型name,因此它只能是plotOptions属性之一。

interface trainInfo {
    name: keyof typeof plotOptions;
    x: Array<number>;
    y: Array<number>;
    type: string;
    mode: string;
}

现在,您将只能使用中存在的属性名称plotOptions

您还必须稍微更改代码

首先将数组分配给一些临时变量,因此TS知道数组类型:

const plotDataTemp: Array<trainInfo> = [
    {
      name: "train_1",
      x: data.filtrationData.map((i: any) => i["1-CumVol"]),
      y: data.filtrationData.map((i: any) => i["1-PressureA"]),
      type: "scatter",
      mode: "lines"
    },
    // ...
}

然后过滤:

const plotData = plotDataTemp.filter(({ name }) => plotOptions[name]);

如果您要从API获取数据并且无法在编译时键入检查道具,则唯一的方法是在您的索引中添加索引签名plotOptions

type tplotOptions = {
    [key: string]: boolean
}

const plotOptions: tplotOptions = {
    train_1: true,
    train_2: true,
    train_3: true,
    train_4: true
}
其他 2022/1/1 18:25:02 有274人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶