简体   繁体   中英

Create empty object from enum typescript

I have some models like this

export class ExpertOperational {
  comment: string;
  outOfService: Date;
  score: string;
  supplierNumber: string;
  useSlots: boolean;
  workingDay: ExpertWorkingDay[] = [];
  workSpeedSurvey: string;
  workSpeedVisit: string;
}

export class ExpertWorkingDay {
  constructor(
    public weekDay: WeekDays,
    public operationalAM: ExpertWorkingHours,
    public operationalPM: ExpertWorkingHours
  ) {}
}

export enum WeekDays {
  MONDAY = 'MONDAY',
  TUESDAY = 'TUESDAY',
  WEDNESDAY = 'WEDNESDAY',
  THURSDAY = 'THURSDAY',
  FRIDAY = 'FRIDAY',
  SATURDAY = 'SATURDAY',
  SUNDAY = 'SUNDAY'
}

export class ExpertWorkingHours {
  constructor(
    public fixed: boolean,
    public startTime: string,
    public endTime: string
  ) {}
}

What i need is to create empty object from enum and models that will look like this

const expert = {
  comment: '',
  outOfService: '',
  score: '',
  supplierNumber: '',
  useSlots: false,
  workingDay: [
    {
      weekDay: 'MONDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    },
    {
      weekDay: 'TUESDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    },
    {
      weekDay: 'WEDNESDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    },
    {
      weekDay: 'THURSDAY',
      operationalAM : {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM
        : {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    },
    {
      weekDay: 'FRIDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    },
    {
      weekDay: 'SATURDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: ''
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    }, {
      weekDay: 'SUNDAY',
      operationalAM: {
        fixed: false,
        startTime: '',
        endTime: '',
      },
      operationalPM: {
        fixed: false,
        startTime: '',
        endTime: ''
      }
    }
  ],
  workSpeedSurvey: '',
  workSpeedVisit: ''
}

What i need is to create object with empty values from model, i dont need to have data! I have tried like this but i had no luck

const data: ExpertWorkingDay[] = [];
const workingHours = Object.values(WeekDays);
workingHours.forEach(day => {
  data.push(
    new ExpertWorkingDay(
      WeekDays[day],
      new ExpertWorkingHours(
        fixed: false,
        startTime = '',
        endTime = ''
      ),
      new ExpertWorkingHours(
        fixed: false,
        startTime = '',
        endTime = ''
      )
    )
  );
});

Thanks

Since your day is dynamic , you'll have to specify that day is of type WeekDays .

to do that , you can use WeekDays[day as keyof WeekDays]

The below code will help you out :

workingHours.forEach(day => {
  data.push(
    new ExpertWorkingDay(
      WeekDays[day as keyof WeekDays],
      new ExpertWorkingHours(
        false,
        '',
        ''
      ),
      new ExpertWorkingHours(
        false,
        '',
        ''
      )
    )
  );
});

I have modified the same example with the problem at hand . Refer this .

I have added workingDays as ['MONDAY' , 'TUESDAY'] .

EDIT :

Since the OP is trying to get the enum keys using Object.values() , you don't have to do anything as Object.values() will return Array<WeekDays> . So set the type of const workingHours as Array<WeekDays> .

const data: ExpertWorkingDay[] = [];
// const workingHours : string[] = Object.keys(WeekDays); //If enum keys
// const workingHours : string[] = ['MONDAY' , 'TUESDAY']; //if day as array
const workingHours : WeekDays[] = Object.values(WeekDays);
workingHours.forEach(day => {
    data.push(
        new ExpertWorkingDay(
            WeekDays[day],
            new ExpertWorkingHours(
                false,
                '',
                ''
            ),
            new ExpertWorkingHours(
                false,
                '',
                ''
            )
        )
    );
});

console.log(data);

为 Object.values() 返回的类型

If I understand it correctly, you don't want the use the hard-coded values of the array instead use the enum.

I have added a sample code, if it helps..

const data: ExpertWorkingDay[] = [];
const workingHours = Object.keys(WeekDays);

console.log(workingHours);

workingHours.forEach(day => {
  data.push(
    new ExpertWorkingDay(
      WeekDays[day as keyof WeekDays],
      new ExpertWorkingHours(
        false,
        '',
        ''
      ),
      new ExpertWorkingHours(
        false,
        '',
        ''
      )
    )
  );
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM