2018-07-25 Discriminated Unions typescript https://www.typescriptlang.org/docs/handbook/advanced-types.html