TypeScript enum to object array

前端 未结 15 2879
不思量自难忘°
不思量自难忘° 2020-12-08 03:38

I have an enum defined this way:

export enum GoalProgressMeasurements {
    Percentage = 1,
    Numeric_Target = 2,
    Completed_Tasks = 3,
    Average_Mile         


        
15条回答
  •  爱一瞬间的悲伤
    2020-12-08 04:00

    You can do that in this way:

    export enum GoalProgressMeasurements {
        Percentage = 1,
        Numeric_Target = 2,
        Completed_Tasks = 3,
        Average_Milestone_Progress = 4,
        Not_Measured = 5
    }
    
    export class GoalProgressMeasurement {
        constructor(public goalProgressMeasurement: GoalProgressMeasurements, public name: string) {
        }
    }
    
    export var goalProgressMeasurements: { [key: number]: GoalProgressMeasurement } = {
        1: new GoalProgressMeasurement(GoalProgressMeasurements.Percentage, "Percentage"),
        2: new GoalProgressMeasurement(GoalProgressMeasurements.Numeric_Target, "Numeric Target"),
        3: new GoalProgressMeasurement(GoalProgressMeasurements.Completed_Tasks, "Completed Tasks"),
        4: new GoalProgressMeasurement(GoalProgressMeasurements.Average_Milestone_Progress, "Average Milestone Progress"),
        5: new GoalProgressMeasurement(GoalProgressMeasurements.Not_Measured, "Not Measured"),
    }
    

    And you can use it like this:

    var gpm: GoalProgressMeasurement = goalProgressMeasurements[GoalProgressMeasurements.Percentage];
    var gpmName: string = gpm.name;
    
    var myProgressId: number = 1; // the value can come out of drop down selected value or from back-end , so you can imagine the way of using
    var gpm2: GoalProgressMeasurement = goalProgressMeasurements[myProgressId];
    var gpmName: string = gpm.name;
    

    You can extend the GoalProgressMeasurement with additional properties of the object as you need. I'm using this approach for every enumeration that should be an object containing more then a value.

提交回复
热议问题