我想通过向对象添加字段来“装饰”对象数组。 我想创建一个函数,将具有用户指定值的用户指定字段添加到该数组中的每个对象。
问题是我不知道如何编写这样的函数。
这甚至无法编译。
$('#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 }));
}
答案 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)