Свяжите ключ и значение generic-параметром K extends keyof T, а свойство value опишите через Readonly<T>.
Реализуйте generic-тип StateObject<T>, который преобразует исходный объектный тип в объект со свойством value, содержащим readonly-версию T, и методом update(key, value), типобезопасно обновляющим значение указанного свойства.
Свяжите ключ и значение generic-параметром K extends keyof T, а свойство value опишите через Readonly<T>.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Свяжите ключ и значение generic-параметром K extends keyof T, а свойство value опишите через Readonly<T>.
Базовый контракт:
type StateObject<T extends object> = {
readonly value: Readonly<T>;
update<K extends keyof T>(key: K, value: T[K]): void;
};
Для конкретного ключа update проверит соответствующий тип значения. Readonly поверхностный и не замораживает объект в runtime. Если ключ сам является union, для строгой корреляции каждого возможного ключа со значением может потребоваться union кортежей аргументов.