I want to add an extra property to an array, but I get trouble with declaring it.
small part
const arr: string[] & {key: number} = ['123'];//ts error Property 'key' is missing
arr.key = 10;
large part
I need to group arr by index then sort it by value
add an index to array property will be a convenience if using Object.values but not Object.entries. I know there are many approaches to do this, but I think it's much easier if I am using plain js
type Arr = {index: number, value: number};
const arr:Arr[] = []
arr.push({
index: 10,
value: 2
})
arr.push({
index: 10,
value: 1
})
arr.push({
index: 10,
value: 3
});
arr.push({
index: 20,
value: 100
});
arr.push({
index: 20,
value: 50
});
arr.reduce<Record<string, Arr[] & {index: number}>>((prev, curr) => {
if(!prev[curr.index]){
prev[curr.index] = [];//ts error Property missing
prev[curr.index].index = curr.index;
}
prev[curr.index].push(curr);
prev[curr.index].sort((a,b) => a.value - b.value);//or some insertion sort algorithm.
return prev;
},{})