类型“ void []”不能分配给类型“ Foo []”

发布时间:2020-07-07 17:39

我正在使用 ramda mapforEach方法,但是当我将鼠标悬停在result变量上时。它给出以下错误:

类型“ void []”不能分配给类型“ Foo []”。

数据类型为Foo,并且代码正确,对此我确信。

我知道我遗漏了return语句。我不确定要在哪里添加。

有人可以帮助我解决这个问题吗?

interface Foo {
  a: number;
  d: number;
  c: number;
}

const col = ["a", "d", "c"];
    const arr = [{ a: 1, c: 2, d: 3 }];

    const ress: Foo[] = map(_item => {
      const item = _item;
      forEach(c => {
        const val = item[c];
        delete item[c];
        item[c] = val;
      }, col);
    }, arr);
回答1

map函数总是将一件事映射到另一件事。意味着需要一些东西并返回一些东西

但是在这里,您不返回任何将其视为无效的内容

我认为应该是这样

const col = ["a", "d", "c"];
    const arr = [{ a: 1, c: 2, d: 3 }];

    const ress: Foo[] = map(_item => {
      const item = _item;
      forEach(c => {
        const val = item[c];
        delete item[c];
        item[c] = val;
      }, col);
      return item
    }, arr);


  };
回答2

您可以写得更简单:

const col = ["a", "d", "c"];
const arr = [{ a: 1, c: 2, d: 3 }];

const project = (col, arr) => 
  arr .map (o => col .reduce ((a, b) => ({... a, [b]: o [b]}), {}))

console .log (project (col, arr))
  //~> [{a: 1, d: 3, c: 2}]