如何编写一个通过类型检查将字段添加到对象数组的函数?

时间:2019-04-08 07:49:18

标签: typescript

我想通过向对象添加字段来“装饰”对象数组。 我想创建一个函数,将具有用户指定值的用户指定字段添加到该数组中的每个对象。

问题是我不知道如何编写这样的函数。

这甚至无法编译。

$('#hw').val('Hello World')

这不起作用。

  public static addField<T extends object>(
    array: T[],
    field: string,
    value: any,
  ): Array<T extends { [field]: string}> {
    return array.map((object) => ({ ...object, [field]: value }));
  }

1 个答案:

答案 0 :(得分:2)

您可以使用交集和Record来完成此操作,但是需要一些断言

class x {
    public static addField<T extends object, K extends PropertyKey, V>(
        array: T[],
        field: K,
        value: V
    ): Array<T & Record<K, V>> {
        const addedValue = { [field]: value } as Record<K, V>
        return array.map((o) => ({ ...o, ...addedValue }));
    }
}

x.addField([{ a: 1 }], "b", "").map(_ => _.a + _.b)