首页 > 解决方案 > 如何在 Typescript 中使用 break 语句

问题描述

我是 Javascript 的新手。我从一个非常基本的 Angular 项目开始,即表单验证。就我而言,我必须validationTest()在其自身内调用我的自定义方法一次。如果我不设置任何中断条件,那么递归就会太多。我必须阻止这一切。我尝试了许多其他解决方案:

  1. TypeScript 中的中断语句
  2. TypeScript - 循环

我非常仔细地跟着他们,但我得到了这个:

模块解析失败:非语法中断 (84:12)

这是我的代码:

validationTest() {
    let count =0;
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    count ++;
    if(count===1) {
        break;
    }
    this.validationTest();
}

甚至 VScode 编辑器也在 token 下显示了一条红色的锯齿线break。我来自 Java 和 CPP 背景。请纠正我。

标签: javascripttypescriptecmascript-6

解决方案


要停止执行函数,请使用return. 仅在 a or循环break的上下文中才有意义。forwhile

但另一个问题是您validationTest没有变量的持久视图count- 它完全是本地的,所以测试无论如何都不会工作。考虑改为传递一个参数,该参数将指示当前调用是否是递归的:

validationTest(lastTry = false) {
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    if (!lastTry) this.validationTest(true);
}

确保初始调用validationTest不传递参数,或传递false.

对于将自己限制为 N 次递归尝试的更通用解决方案,您可以传递一个数字,例如:

validationTest(triesLeft = 3) {
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    if (triesLeft !== 0) this.validationTest(triesLeft - 1);
}

推荐阅读