属性 'on' 在类型 'FluentRules<any, any> | FluentEnsure<any> | FluentRuleCustomizer<any, any>' 上不存在。
Property 'on' does not exist on type 'FluentRules<any, any> | FluentEnsure<any> | FluentRuleCustomizer<any, any>'.
我正在编写 aurelia-validation 并在使用 on
时遇到问题,它是不同重载 (FluentRuleCustomizer
) class 的一部分。当我使用 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);
}
}
}
}
Link 为 aurelia-validation
公开的所有导出的 classes
非常感谢任何帮助:)
aurelia-validation
的类型/api 不适合动态构建这样的规则,因此您需要作弊。
只需将您的初始声明更改为:
let ruleBuilder: FluentRuleCustomizer<any, any> = ValidationRules
.ensure("value")
.displayName(field.label) as any;
它实际上不会是 FluentRuleCustomizer
(因此需要 as any
),但它会在您的下面的逻辑对其应用任何规则之后出现。老实说,我认为 .displayName()
应该只是 return 一个 FluentEnsure
或 FluentRuleCustomizer
(两者都有 .on()
方法做同样的事情)但这是另一个讨论。
您可能需要仔细检查是否实际应用了任何规则,否则 .on()
会出错:
if (rules.length) {
ruleBuilder.on(field);
}
我正在编写 aurelia-validation 并在使用 on
时遇到问题,它是不同重载 (FluentRuleCustomizer
) class 的一部分。当我使用 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);
}
}
}
}
Link 为 aurelia-validation
非常感谢任何帮助:)
aurelia-validation
的类型/api 不适合动态构建这样的规则,因此您需要作弊。
只需将您的初始声明更改为:
let ruleBuilder: FluentRuleCustomizer<any, any> = ValidationRules
.ensure("value")
.displayName(field.label) as any;
它实际上不会是 FluentRuleCustomizer
(因此需要 as any
),但它会在您的下面的逻辑对其应用任何规则之后出现。老实说,我认为 .displayName()
应该只是 return 一个 FluentEnsure
或 FluentRuleCustomizer
(两者都有 .on()
方法做同样的事情)但这是另一个讨论。
您可能需要仔细检查是否实际应用了任何规则,否则 .on()
会出错:
if (rules.length) {
ruleBuilder.on(field);
}