打字稿:输入具有动态属性的对象

时间:2019-09-18 20:28:53

标签: typescript strong-typing

我想循环一个数组来创建一个对象。

输入:

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不能具有字符串属性。我应该如何正确键入此函数?

1 个答案:

答案 0 :(得分:1)

您需要更明确地说明结果的类型,打字稿不会知道{}应该是具有任何键字符串和字符串值的对象:

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;
}, {})

注意:另外,您还需要从化简函数返回acc