Búsqueda de sitios web

javascript - convertir cadena a valor de enum en angular 8


Necesito pasar tipo enum al servidor. Pero cuando envío el formulario al servidor, envía campo enum como tipo string.

este es mi enum:

export enum PayTypes {
  Free,
  Subscribe
}

y este es mi formulario :

createForm(): void {
    this.lessonAddForm = new FormGroup({
        payType: new FormControl('', Validators.required),
    });
}


addLesson(): void {
    const payString = PayTypes[this.lessonAddForm.controls['payType'].value];
    const payType: PayTypes = PayTypes[payString];
    this.lessonAdd = this.lessonAddForm.value;
    this.lessonAdd.payType = payType;
    this.subscriptions = this.lessonService
        .add(this.lessonAdd)
        .subscribe(
            res => {
                if (res.success === true) {
                    this.alertService.success('', 'GENERAL.ADD_SUCCESS');
                    this.backToMenu();
                }
            }
        );
}

y intento convertir una cadena a enum de esta manera:

    const payString = PayTypes[this.lessonAddForm.controls['payType'].value];
    const payType: PayTypes = PayTypes[payString];
    this.lessonAdd = this.lessonAddForm.value;
    this.lessonAdd.payType = payType;

pero no funciona.

¿Cómo puedo resolver este problema????

Respuesta #1

Debes convertir el valor dentro del corchete a cadena de esta manera

const payType: PayTypes = PayTypes[payString.toString()];

También puedes ver esta publicación

Actualización: Verifica cómo obtienes los datos de payString, ¿coinciden con la definición de tu enumeración? Ten en cuenta que tus datos de payString deben ser iguales a la clave de tu enumeración

Por ejemplo:

PayTypes['Free'] // This will work

Y

PayTypes['free'] // This won't