【问题标题】:Typescript is giving error. Element implicitly has an 'any' type because expression of type 'string' can't be used to index type打字稿给出错误。元素隐式具有 \'any\' 类型,因为类型 \'string\' 的表达式不能用于索引类型
【发布时间】:2022-09-23 09:19:10
【问题描述】:

我有一个这样的对象:

const obj = {
  user_name: \'user2\',
  user_desc: \'desc 2\',
};

现在我正在调用一个 onClick 函数,该函数指定从对象中获取哪个参数

function myFunction(key_name: string) {
  // as my constant is of type object, I can get data from keys as
  console.log(obj[key_name]);
}

我的功能运行良好,但打字稿给我一个错误

元素隐式具有 \'any\' 类型,因为类型 \'string\' 的表达式不能用于索引类型 \'{}\'

我该如何摆脱这个错误? 谢谢

    标签: typescript


    【解决方案1】:

    您可以创建一个界面来描述您的数据形状

    interface Obj {
      user_name: string;
      user_desc: string;
    }
    
    const obj: Obj = {
      user_name: 'user2',
      user_desc: 'desc 2',
    };
    
    function myFunction(key_name: keyof Obj) {
      console.log(obj[key_name]);
    }
    
    myFunction('user_name');
    

    【讨论】:

      【解决方案2】:

      由于您创建了obj,因此键是由打字稿推断的。

      有两种方法可以解决这个问题:

      1. 输入obj
        const obj: Record<string, string> = {
         user_name: 'user2',
         user_desc: 'desc 2'
        }
        

        - - 或者 - - -

        1. 为您的函数参数指定类型
        function myFunction (key_name : keyof typeof obj) {
         console.log(obj[key_name])
        }
        
        

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 2023-01-09
        • 2022-10-08
        • 2022-11-10
        • 2022-01-17
        • 2021-12-24
        • 2019-11-24
        • 2021-10-24
        • 1970-01-01
        相关资源
        最近更新 更多