Using interfaces instead of events