Можно ещё так https://www.typescriptlang.org/play?#code/MYewdgzgLgBKYDMCWBzGBeGBvAUDGAbgKYBOES4AXDAOQCMATAMw0A0eMArmEqCWNSglORHAF8cOANwAKAPIAjAFZFgUAHQBrIgE8IM+MhQBKGAEMIMAIIkSZnQB5tOkAhhQdAByKu44IwB8xhzqCCAkAKJmwAAWMs4YAX6QIAA2ROqpICgG-qgA2s4AusbGQA без явного типа
Но как мы выяснили, это не до конца безопасно потому, что есть же подтипы и надтипы, если в функцию. которая такое делает, передадут объект, который является подтипом и у него дополнительные поля - это может все сломать