【问题标题】:Resolving Typescript compiler messages for the runtime Javascript attributes为运行时 Javascript 属性解析 Typescript 编译器消息
【发布时间】:2019-07-05 10:25:34
【问题描述】:

我有一段代码如下:

<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>

如果您使用的是 Angular,您可以使用 email.errors.required 之类的代码检查输入中是否包含无效数据。但是,.required.email 等都是在 JS 的运行时执行期间出现的,因此在 TypeScript 的编译时是不知道的。

当我查看 IDE(使用 Jetbrains Rider,顺便说一句)时,我看到了这些编译时警告,我想以 TypeScript 惯用的方式解决它们:

我已经尝试过(email.errors as any).required,但警告不会消失。我相信as 现在是推荐的投射方式,而不是(&lt;any&gt; email.errors).required。好吧,无论如何,他们都没有工作。那么如果没有我去组件(Angular 概念)并修改它们,例如通过属性公开这些错误消息等,您的建议是什么?

编辑:

这些是警告信息:

【问题讨论】:

  • 警告说明了什么?
  • @messerbill 立即查看新编辑。
  • 警告是否消失使用此符号:*ngIf="email["errors"]["required"]?
  • 将文本信息包含为文本,而不是图像。
  • this issue 中的一个建议是使用安全导航运算符:email?.errors.required

标签: javascript angular typescript


【解决方案1】:

实际问题是预期存在的类型。 ngIf 构造期望有一个带有 boolean 结果的表达式,但就实际状态而言,您的代码并不能确保该要求。要使警告消失,您应该使用 '?' 运算符安全导航或将表达式转换为 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

【讨论】:

  • 这是问题所在,您的回答正确。不过很有趣。那么错误消息完全是误导性的。
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
相关资源
最近更新 更多