userRepository.save(user);
user.changeFirstname('John2'); // проверяем вход => записываем в User.firstname
геттеры нужны на случай если исходное имя поля изменится, чтобы ничего в публичном апи не сломалось.
Это понятно, но изменяться будет он-же, он же и хранит логику для полей.
Прокси хорошо - но от дублирования не спасает, а это основная проблема сейчас.
Потеряется user.field, user.v.field странно выглядит.
Без (кривых и некрасивых) костылей - низя.
export const useEmitter = <EM extends Record<string, any>>() => <K extends keyof EM>(event: K) => { ...
const emitTest1 = useEmitter<TableEventMap>()("cell:hover");
const emitTest2 = useEmitter<TableEventMap>()("test2");