类型'FluentRules <any,any =“”> |上的属性'on'不存在FluentEnsure <any> | FluentRuleCustomizer <any,any =“”>'。

时间:2018-04-24 18:36:27

标签: typescript aurelia aurelia-framework aurelia-validation

我正在编写aurelia-validation并使用on进行问题,FluentRuleCustomizer是不同重载(ruleBuilder['on'](field);)类的一部分。当我使用ruleBuilder.on(field);时,它可以正常工作,但当我将其更改为ruleBuilder.on(field);时,我会在import { ValidationRules, FluentRuleCustomizer, FluentEnsure, FluentRules } from 'aurelia-validation'; import { on } from 'cluster'; export class FormHelper { private static initializedForms = []; public static initializeFormRules(form) { if (this.initializedForms.indexOf(form) > -1) { return; } this.initializedForms.push(form); for (const field of form.fields) { if (field.validation.isValidate) { let ruleBuilder: | FluentRules<any, any> | FluentEnsure<any> | FluentRuleCustomizer<any, any>; ruleBuilder = ValidationRules .ensure("value") .displayName(field.label); const rules = Object.keys(field.validation.validationRule) .map(key => ({ key, value: field.validation.validationRule[key] })); for (const rule of rules) { ruleBuilder = ruleBuilder[rule.key](rule.value); } // ruleBuilder['on'](field); ruleBuilder.on(field); } } } } 上获得一条红色的波浪线。请参阅以下代码和屏幕截图。

aurelia-validation

Link显示为m <- tidyr::spread(test, Group, Range, fill = 0) mat <- as.matrix(m[, -1]) dimnames(mat) <- list(m$CpG, colnames(m[, -1])) mat 1 2 3 4 5 cg01003813 0.9710 0.0917 0.0535 0.0627 0.0575 cg13176022 0.0895 0.0236 0.0412 0.0478 0.0346 cg25296477 0.0745 0.1300 0.0772 0.1310 0.0765 cg26484667 0.0768 0.1040 0.0735 0.0453 0.1390

公开的所有导出类

非常感谢任何帮助:)

enter image description here

1 个答案:

答案 0 :(得分:1)

aurelia-validation的typings / api不适合动态构建这样的规则,所以你需要作弊。

只需将您的初始声明更改为:

let ruleBuilder: FluentRuleCustomizer<any, any> = ValidationRules
      .ensure("value")
      .displayName(field.label) as any;

实际上它不会是FluentRuleCustomizer(因此需要as any),但是在下面的逻辑应用了任何规则之后。 Tbh我认为.displayName()应该只返回FluentEnsureFluentRuleCustomizer(两者都有.on()方法做同样的事情)但这是另一个讨论。

您可能想要仔细检查是否实际应用了任何规则,否则.on()会出错:

if (rules.length) {
    ruleBuilder.on(field);
}