代码之家  ›  专栏  ›  技术社区  ›  Tarik

为运行时javascript属性解析typescript编译器消息

  •  0
  • Tarik  · 技术社区  · 6 年前

    我有一段代码,如下所示:

    <div class="authentication-validation-message-container">
      <ng-container *ngIf="email.invalid && (email.dirty || email.touched)">
        <div class="validation-error-message" *ngIf="email.errors.required">Email is required.</div>
        <div class="validation-error-message" *ngIf="email.errors.email">Email is not in the valid format. Please use a valid
          email.
        </div>
      </ng-container>
      <ng-container *ngIf="pwd.invalid && (pwd.dirty || pwd.touched)">
        <div class="validation-error-message" *ngIf="pwd.errors.required">Password is required.</div>
      </ng-container>
      <div class="validation-error-message" *ngIf="!verdict">{{errorMessage}}</div>
    </div>
    

    如果您使用的是角度,那么可以使用类似这样的代码检查输入中是否包含无效数据。 email.errors.required . 然而, .required , .email 等等,所有这些都是在JS的运行时执行过程中出现的,所以在编译期间没有typescript知道。

    当我查看IDE(使用JetBrains Rider,btw)时,我看到了这些编译时警告,我希望以打字脚本惯用方式解决这些警告:

    enter image description here

    我试过了 (email.errors as any).required 但这些警告不会消失。我相信 as 现在是推荐的铸造方法而不是 (<any> email.errors).required . 不管怎样,他们两个都没用。所以,如果我不去组件(角度概念)并修改它们,比如通过属性暴露这些错误消息,您的建议是什么?

    编辑:

    以下是警告信息:

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   NiVeR    6 年前

    实际问题是应该存在的类型。这个 ngIf 构造的表达式应为 boolean 结果,但从实际状态来看,您的代码并不能确保这一需求。要消除警告,应使用 '?' 运算符或将表达式强制转换为 布尔 类型。

    例如,您可以执行以下操作:

    <div class="validation-error-message" *ngIf="email?.errors.required">Email is required.</div>
    <div class="validation-error-message" *ngIf="email?.errors.email">Email is not in the valid format. Please use a valid