【问题标题】:Type 'void[]' is not assignable to type 'Foo[]'类型 'void[]' 不能分配给类型 'Foo[]'
【发布时间】:2020-07-08 03:57:33
【问题描述】:

我正在使用 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);

【问题讨论】:

  • 你没有从map返回任何东西。不清楚你想做什么
  • @DanielA.White 你现在可以看一下吗。我更新了代码
  • 你必须在 map 中有一个return 声明,否则你不会从中得到任何回报。
  • @M-N 是的,我知道,但我不知道在哪里添加它。可以修一下吗?
  • @ScottSauyet 是的,先生,这是一个旧帐户,但我没有使用它。我最近很活跃。当然,我会牢记您的话,并从现在开始尝试回答

标签: javascript reactjs angular typescript ramda.js


【解决方案1】:

你可以写得更简单:

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}]

这个函数已经存在于 Ramda,project

我们可以这样做:

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

console .log (project (col, arr))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
<script> const {project} = R                                         </script>

但是,如果您不使用它来创建对象属性的适当子集,我建议您根本不需要此功能。它所做的只是创建一个新版本的对象,并按特定顺序添加属性。但是对象在逻辑上应该被视为无序集合,所以看起来很浪费。

如果您真的将它用于属性子集,则可以使用 Ramda 版本。但是上面的第一个版本似乎也是一个合理的替代品。

【讨论】:

  • 非常感谢 Scott 的帮助。真的很感激:)
  • const col = ["a", "d", "c"]; const arr = map( item => pick(col, item), data ); // [{ a: 1, c: 2, d: 3 }]; project(col, arr) 在项目操作之前,我正在执行pick和map操作。如何将这 2 个操作合并到一个语句中?
  • @newbie:我没有遵循你想要的。但这听起来好像应该是一个不同的问题。
  • 如何将这两个操作合二为一? const arr = map( item => pick(col, item), data ); AND 项目(col,arr)?
  • 对不起,我无法在这里很好地解释它。顺便说一句,让我们留下吧,非常感谢您的帮助和时间:)
【解决方案2】:

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);


  };

【讨论】:

  • 感谢您的帮助:)
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2017-09-21
  • 2021-09-23
  • 2019-05-12
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多