import { Merge } from 'type-fest'; export function set(input: readonly T[], key: number, value: T): readonly T[] export function set < T extends Record, K extends Readonly, V >( input: Readonly, key: K, value: V, ): Merge export function set < T extends Record, K extends Readonly, V >( input: Readonly, key: K, value: V, ): Merge { if (input[key] === value) { return input; } const result: any = Array.isArray(input) ? [] : {}; Object.keys(input).forEach((inputKey) => { result[inputKey] = inputKey === key ? value : input[inputKey]; }); result[key] = value; return result; };