TypeScript interface with XOR, {bar:string} xor {can:number}

typescript keyof
typescript infer
typescript mutually exclusive types
typescript constructorparameters
typescript xor operator
typescript unwrap promise type
typescript omit generic
typescript recursive partial