确保类属性等于打字稿中类的名称?

时间:2019-12-17 09:12:26

标签: typescript

这里an example

interface ICommandHandler<T> {
  type: string // how to ensure string == T.name ?
  handle(command: T): void;
}

interface ICommand {}

class CreateTaskCommand implements ICommand{}

class CreateTaskCommandHandler implements ICommandHandler<CreateTaskCommand> {
  type = "CreateTaskCommanD" // typo
  handle(command: CreateTaskCommand) {}
}

我的目标是确保type中的CreateTaskCommand属性等于CreateTaskCommandHandler字符串。

我之前的示例没有引发打字错误。

1 个答案:

答案 0 :(得分:0)

也许您应该尝试在命令中使用静态属性。
即使您有错字,它仍然可以使用。

interface ICommandHandler<T> {
  canHandle(command:T): boolean; 
  handle(command: T): void;
}

interface ICommand {
  type: string;
}

class CreateTaskCommand implements ICommand{
  static commandName: string = 'CreateTaskCommand'
  type = CreateTaskCommand.commandName;
}

class CreateTaskCommandHandler implements ICommandHandler<CreateTaskCommand> {
  canHandle(command: CreateTaskCommand): boolean {
    return command.type === CreateTaskCommand.commandName;
  }
  handle(command: CreateTaskCommand) {}
}