interfaceMap<a>{[key: string]: a;}// IMPORTANT: here my intention is that the `read` and `run` methods are agreed on using the same type parameterinterfaceCommand<Options>{read(args: string[]): Options;run(options: Options): void;};interfaceCopyCommandOptions{from: string;to: string;}interfaceCleanCommandOptions{directory: string;pattern: string;}// currently in TypeScript there are 2 options to to declare `knownCommands` below:// - Map<Command<any>> which contaminates my code with `any`// - Map<Command<CopyCommandOptions | CleanCommandOptions>> which has different semantics// ideally I wish I could declare it like this:letknownCommands : Map<<a>Command<a>>={// <-- hypothetical syntax'copy': <Command<CopyCommandOptions>>undefined,'clean': <Command<CleanCommandOptions>>undefined};// so that later I could the following do in a type safe manner:letcommand=knownCommands[name];command.run(command.read(args));