将字符串转换为枚举值(角度8)

时间:2019-11-25 06:25:26

标签: javascript angular typescript ecmascript-6 rxjs

我需要将enum type传递到服务器。但是,当我将表单发送到服务器时,它通过类型enum fild发送string

这是我的列举:

export enum PayTypes {
  Free,
  Subscribe
}

这是我的表格:

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();
                }
            }
        );
}

然后我尝试通过这种方式将字符串转换为枚举:

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

但不起作用。

我该如何解决此问题??

1 个答案:

答案 0 :(得分:3)

您必须将方括号内的值转换为这样的字符串

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

您还可以查看此post

更新:检查如何获取payString数据是否与您的枚举定义匹配?请注意,您的payString数据必须与枚举键相同

例如:

PayTypes['Free'] // This will work

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