Is this because when defining it without a type it becomes a single-value union?
See example - 'c' object allows 'bar' being assigned an invalid value.
https://www.typescriptlang.org/play?#code/MYewdgzgLgBAYiEBhc0YF4YCIBmisDcMA9MTAO4CWUAFiAK6wCmAHgA4A2lw1M0ATpTABzAFChIsAEIBDfikkAuPlEEiM2AEZzCJMjIgxWnbrwFCxoqAE82TeIln8NAb1EwYeEMpt2QOB2RUKAJ3GG1+H1smfxgnBWhQgF9RUQ4mWBllBBAnVzCvbMQEqAAaMIjleODRFLSM8KLcuXyPQpgAci8O8o9KzoiO2tT02GAmvMw3NsRlDoAvRZ69GAAVaM6sRfmsDphKQzAQTIgISmEwGU10mCgQW42O3HwOgDoACgAmAGZPz4BKCpyObbPakCg0az7Qy0A4wGQcDggchMAAmAH5hqkJBAQOlXkjhO8AFIAZQA8gA5V7mESUHDWd4ueGlcKs4AwJL-f6hIA
The Playground lets you write TypeScript or JavaScript online in a safe and sharable way.