https://designtechworld.medium.com/the-difference-between-type-aliases-and-interfaces-in-typescript-5757370894fe