【问题标题】:How to get dictionary value by key如何按键获取字典值
【发布时间】:2022-12-05 23:23:09
【问题描述】:

这是我的命令:

export const roles = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
};

我想像这样按键获取值:

let x = "key1"; 
let y = roles[x]

我收到了错误

元素隐式具有“任何”类型,因为类型的表达式 'string' 不能用于索引类型 '{ key1: string;键2:字符串; 键3:字符串; }'。没有带有类型参数的索引签名 在类型 '{ key1: string; 上找到 'string'键2:字符串;关键3: 细绳; }'.ts(7053)

我该怎么做?

【问题讨论】:

  • let x: keyof roles = "key1";

标签: typescript


【解决方案1】:

错误消息“元素隐式具有‘任何’类型,因为‘字符串’类型的表达式不能用于索引类型‘{key1:string;key2:string;key3:string;}’。没有参数为的索引签名在类型 '{ key1: string; key2: string; key3: string; }' 上找到了类型 'string'。”

// Provide a type for the x variable
let x: keyof typeof roles = "key1";
let y = roles[x];

【讨论】:

  • 因为我从输入中获取 x 值,所以出现此错误:Type 'string' is not assignable to type '"key1" | "key2" | "key3"'.
【解决方案2】:

能够通过这样的界面来解决这个问题:

interface LoosObject {
[key: string]: any
}

export const roles: LoosObject = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
};

【讨论】:

    【解决方案3】:

    看起来您正在尝试使用变量访问对象属性。
    在 TypeScript 中,默认情况下不允许这样做,因为它会导致意外行为。
    您可以通过向对象添加索引签名来修复此错误,如下所示:

    export const roles = {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3",
      [x: string]: any // add this line
    };
    
    let x = "key1"; 
    let y = roles[x] // this should work now
    

    【讨论】:

    • 出现错误'string' only refers to a type, but is being used as a value here.ts(2693)
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2011-12-22
    相关资源
    最近更新 更多