提问者:小点点

如何用Typescript制作带有字符串索引的复杂接口?


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

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

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

  }, {});
};

我得到了一个打字脚本错误:

类型“string”的表达式不能用于索引类型“mydoc”

我不想将mydoc转换为带有字符串索引的对象的泛型接口,因为它正在链的更上游使用。

我想保留mydoc界面。

顺便说一句,这对我来说毫无意义。为什么我不能使用对象自己的键来索引它呢?


共1个答案

匿名用户

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

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

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

由于某种奇怪的原因,object.keys返回array,而不是array。最简单的替代方法是使用object.entries来同时提取键和值。