简体   繁体   English

从枚举打字稿创建空对象

[英]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 .由于您的day是动态的,您必须指定该day的类型为WeekDays

to do that , you can use WeekDays[day as keyof WeekDays]为此,您可以使用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'] .我已将workingDays添加为['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> .由于 OP 正在尝试使用Object.values()获取枚举键,因此您无需执行任何操作,因为Object.values()将返回Array<WeekDays> So set the type of const workingHours as Array<WeekDays> .因此,将const workingHours的类型设置为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,
        '',
        ''
      )
    )
  );
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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