XOR is needed to have a real mutually exclusive union type https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
XOR is needed to have a real mutually exclusive union type https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types