使用静态类字段作为枚举的最优雅的方法

时间:2018-12-04 06:50:36

标签: typescript

在方法buildErrorMessage中,参数errorType的值必须是ErrorMessagesBuilder.ERROR_TYPES值的某个值。当然,如果在类之外定义类型别名或类似的名称,则可以解决此问题。是否有更优雅的解决方案,完全封装在ErrorMessagesBuilder中?

export default class ErrorMessagesBuilder {

  public static ERROR_TYPES: {[propertyName: string]: string} = {
    REQUIRED_PARAMETER_ABSENCE: 'Required parameter absence',
    INVALID_PARAMETER_VALUE: 'Invalid parameter value',
    INVALID_PARAMETER_TYPE: 'Invalid parameter type',
    INVALID_VALUE: 'Invalid parameter value',
    IMPROPER_USAGE: 'Improper usage'
  };

  public static buildErrorMessage(
      {
        methodCallingExpression,
        errorType,
        description,
        possibleCauses,
        recommendedChecklist
      } : {
        methodCallingExpression: string,
        errorType: /* On of ErrorMessagesBuilder.ERROR_TYPES  */,
        description: string,
        possibleCauses?: string | Array<string>,
        recommendedChecklist?: string | Array<string>
      }): string
  {
    // ...
  }
}

1 个答案:

答案 0 :(得分:1)

您可以在类外部声明枚举,并使用静态成员将其公开。希望这适合您的用例。否则,我看不到解决您的问题的更好方法。

enum ERROR_TYPES {
  REQUIRED_PARAMETER_ABSENCE = "Required parameter absence",
  INVALID_PARAMETER_VALUE = "Invalid parameter value",
  INVALID_PARAMETER_TYPE = "Invalid parameter type",
  INVALID_VALUE = "Invalid parameter value",
  IMPROPER_USAGE = "Improper usage",
}
export default class ErrorMessagesBuilder {
  public static ERROR_TYPES = ERROR_TYPES;

  public static buildErrorMessage({
    methodCallingExpression,
    errorType,
    description,
    possibleCauses,
    recommendedChecklist,
  }: {
    methodCallingExpression: string;
    errorType: ERROR_TYPES;
    description: string;
    possibleCauses?: string | Array<string>;
    recommendedChecklist?: string | Array<string>;
  }): void {
    // ...
  }
}