【问题标题】:TypeScript - A computed property name must be of type 'string', 'number', 'symbol', or 'any'TypeScript - 计算属性名称必须是“字符串”、“数字”、“符号”或“任意”类型
【发布时间】:2020-09-23 14:25:49
【问题描述】:

我正在尝试将我的打字稿代码中的计算机属性名称功能用作

import {camelCase} from "lodash";

const camelizeKeys = (obj:any):any => {
  if (Array.isArray(obj)) {
    return obj.map(v => camelizeKeys(v));
  } else if (obj !== null && obj.constructor === Object) {
    return Object.keys(obj).reduce(
      (result, key) => ({
        ...result,
        [camelCase(key)]: camelizeKeys(obj[key]),   // error on [camelCase(key)]
      }),
      {},
    );
  }
  return obj;
};

编译时错误如下:

计算属性名称的类型必须为“string”、“number”、“symbol”或“any”.ts

我尝试通过关注this SO thread 来解决此错误,但没有成功。

【问题讨论】:

  • 你是如何实现camelCase()的?
  • 可能camelCase 不返回stringnumber
  • @Thomas,我更新了问题,camelCase 是一个 lodash 函数
  • 您可能需要为camelCase 添加类型提示,以便 TS 知道它返回一个字符串?

标签: javascript typescript


【解决方案1】:

你有 lodash 打字吗?

npm install @types/lodash

如果是这样并且它们仍然不起作用,您可能只需要断言 camelCase(key) 的类型:

[camelCase(key):string]: camelizeKeys(obj[key]),

【讨论】:

    【解决方案2】:

    根据@Klaycon 的回答。我安装了类型,这给了我关于 camelCase() 的返回类型的提示。然后我设法解决了这个问题

     [String(camelCase(key))]: camelizeKeys(obj[key]),
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多