typescript union vs intersection types