类型 'void[]' 不可分配给类型 'Foo[]'
Type 'void[]' is not assignable to type 'Foo[]'
我正在使用 ramda map
和 forEach
方法,但是当我将鼠标悬停在 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 函数总是将一件事映射到另一件事。意味着它需要一些东西 return 一些东西
但这里你没有 return 将其视为无效的任何东西
我觉得应该是这样的
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);
};
你可以写得更简单:
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 版本。但上面的第一个版本似乎也是一个合理的替代品。
我正在使用 ramda map
和 forEach
方法,但是当我将鼠标悬停在 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 函数总是将一件事映射到另一件事。意味着它需要一些东西 return 一些东西
但这里你没有 return 将其视为无效的任何东西
我觉得应该是这样的
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);
};
你可以写得更简单:
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 版本。但上面的第一个版本似乎也是一个合理的替代品。