Поскольку используемый вами аксессор свойства может быть любой строкой, Flow считает, что вы пытаетесь использовать экземпляр класса в качестве карты . Чтобы обойти это, вам нужно выполнить некоторую проверку переменной command
перед вызовом методов экземпляра. Вот мой предложенный способ, как это сделать:
( Попробуйте )
class Commander {
constructor() {}
create() {}
test() {}
undo() {}
redo() {}
execute(...args): void {
const command: string = args.slice(0);
const rest: any[] = args.slice(1);
switch(command) {
case "test":
this.test.apply(this, rest);
break;
case "undo":
this.undo.apply(this, rest);
break;
case "redo":
this.redo.apply(this, rest);
break;
default:
throw new Error("Invalid command");
}
}
}
Вы также можете заменить синтаксис method.apply(this, rest)
на method(...rest)
, чтобы сделать его немного чище, но это стилистически и не очень важно для вашего вопроса.