打字稿:键入具有动态属性的对象
Typescript: typing an object with dynamic properties
我想循环一个数组来创建一个对象。
输入:
const input = [{email:email1, name: name1},{email:email2, name: name2}, {email:email3, name: name3}]
期望的输出:
const output = {email1: name1, email2: name2, email3: name3
}
在javascript中,我写了
let output = input.reduce((acc, cur, i) => {
return (acc[cur.email] = cur.name)
}, {})
但是我收到一个输入错误,提示 obj 不能有字符串 属性。我应该如何正确输入此函数?
您需要更明确地说明结果的类型,打字稿不会知道 {}
应该是一个具有任何键字符串和字符串值的对象:
const input = [{ email: 'email1', name: 'name1' }, { email: 'email2', name: 'name2' }, { email: 'email3', name: 'name3' }]
let output = input.reduce<Record<string, string>>((acc, cur, i) => {
acc[cur.email] = cur.name
return acc;
}, {})
注意:你还需要returnacc
来自reducer函数。
我想循环一个数组来创建一个对象。
输入:
const input = [{email:email1, name: name1},{email:email2, name: name2}, {email:email3, name: name3}]
期望的输出:
const output = {email1: name1, email2: name2, email3: name3
}
在javascript中,我写了
let output = input.reduce((acc, cur, i) => {
return (acc[cur.email] = cur.name)
}, {})
但是我收到一个输入错误,提示 obj 不能有字符串 属性。我应该如何正确输入此函数?
您需要更明确地说明结果的类型,打字稿不会知道 {}
应该是一个具有任何键字符串和字符串值的对象:
const input = [{ email: 'email1', name: 'name1' }, { email: 'email2', name: 'name2' }, { email: 'email3', name: 'name3' }]
let output = input.reduce<Record<string, string>>((acc, cur, i) => {
acc[cur.email] = cur.name
return acc;
}, {})
注意:你还需要returnacc
来自reducer函数。