【问题标题】:How can I make a complex interface with string indexes with Typescript?如何使用 Typescript 制作带有字符串索引的复杂接口?
【发布时间】:2020-10-15 22:47:39
【问题描述】:

如何创建一个独特但允许我索引它的值的接口:

export const convertKeyNames = (Doc: MyDoc) => {
  return Object.keys(Doc).reduce((doc, key) => {

    return {
      [key[0].toLowerCase() + key.slice(1)]: Doc[key],
    };

  }, {});
};

我收到一个打字稿错误:

“字符串”类型的表达式不能用于索引“MyDoc”类型

我不想将MyDoc 转换为具有字符串索引的对象的通用接口,因为它正在被进一步使用链。

我想保留MyDoc接口。

另外作为旁注,这对我来说毫无意义。为什么我不能使用对象自己的键来索引它?

【问题讨论】:

    标签: javascript node.js typescript


    【解决方案1】:

    听起来您只是想转换输入对象的键。考虑通过映射对象的条目来创建新对象:

    export const convertKeyNames = (Doc: MyDoc) => (
      Object.fromEntries(
        Object.entries(Doc).map(
          ([key, val]) => [key[0].toLowerCase() + key.slice(1), val]
        )
      )
    );
    

    为什么我不能使用对象自己的键来索引它?

    对于some strange reasonObject.keys 返回Array<string>,而不是Array<keyof param>。最简单的替代方法是使用 Object.entries 来一次提取键和值。

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 2015-05-16
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2014-07-25
      • 2022-06-28
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多