посмотрите как можно и нельзя
использовать
тип {} даже более широкий, чем object. Ему соответствует что угодно кроме null и undefined, т.е. любой тип наследуется от него.
Поэтому присвоить ему можно что угодно.
А прочитать ничего нельзя.
В случае юниона надо сначала сузить тип с помощью тайпгарда, чтобы убедить TS что свойство есть.