В следующем коде TypeScript выдает ошибку «1001 *» в присваивании obj [key], хотя мне кажется, что все должно быть в порядке.
type Function <P extends any[], O> = (...params: P) => O
type Z <K extends string | number | symbol, P extends any[], O> = {
[key in K]: Function<P, O>
}
/**
* Wraps an existing function to call the given function with the result.
* The original function is functionally identical.
*/
export function consumer <
T extends Z<K, P, O>,
K extends keyof T,
P extends any[],
O
> (
obj: T,
key: K,
consume: Function<[O], void>
) {
obj[key] = (...params: P) => {
const value = obj[key](...params)
consume(value)
return value
}
}