【问题标题】:How to safely traverse an object's key and print all value by the key in typescript?如何安全地遍历对象的键并通过打字稿中的键打印所有值?
【发布时间】:2020-05-09 09:22:52
【问题描述】:

我正在学习打字稿,我正在尝试定义一个函数来遍历对象的值,但是当我这样做时,tslint 告诉我:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'. No index signature with a parameter of type 'string' was found on type '{}'.ts(7053)

这是我的代码:

function proxyData(data: object) {
  Object.keys(data).forEach((key: string) => {
    console.log(data[key]);
  });
}

【问题讨论】:

    标签: typescript tslint


    【解决方案1】:

    在 typescript 对象中默认没有定义任何键。 如果您想访问已知结构上的键,请明确指定您的数据对象。

    例如

    interface MyData {
      key1: string;
      key2: boolean;
    }
    
    function proxyData(data: MyData) {
      Object.keys(data).forEach((key: string) => {
        console.log(data[key]);
      });
    }
    
    

    如果你不想指定键,你可以给出一个通用的索引结构

    interface myData {
      [key: string]: string;
    }
    

    否则使用any 而不是object

    既然您尝试获取键和值,请考虑使用Object.entries

    function proxyData(data: myData) {
      for (let [key, value] of Object.entries(data)) {
        console.log(key + ':' + value);
      }
    }
    
    

    【讨论】:

      【解决方案2】:

      将对象定义为say,

      let myDictionary: { [index: string]: any; } = {};
      for (let key in myDictionary) 
      {
        let value = myDictionary[key];
        // Use `key` and `value` 
      }
      

      在TS中你需要定义Object类型,即使你不知道确切的类型,你可以使用上面的字典结构

      >= ES 2017:请参阅此处以配置或使用 es7 并在 typescript 中工作

       Object.entries(myDictionary).forEach(
        ([key, value]) => console.log(key, value);
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2021-06-26
        • 2018-01-25
        • 2020-04-20
        • 1970-01-01
        相关资源
        最近更新 更多