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);
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.