Angular 验证器FN函数的正确返回值是多少?

Angular 验证器FN函数的正确返回值是多少?,angular,validation,Angular,Validation,我的自定义验证器中有以下代码: import { ValidatorFn, AbstractControl } from '@angular/forms'; // Credit for this function: // https://stackoverflow.com/a/17390131/2044 function isPrime(aNumber: number): boolean { let start: number = 2; const limit: number = Ma

我的自定义验证器中有以下代码:

import { ValidatorFn, AbstractControl } from '@angular/forms';

// Credit for this function:
// https://stackoverflow.com/a/17390131/2044
function isPrime(aNumber: number): boolean {
  let start: number = 2;
  const limit: number = Math.sqrt(aNumber);
  while (start <= limit) {
    if (aNumber % start++ < 1) {
      return false;
    }
  }
  return aNumber > 1;
}

export class NumberValidators {
  static isPrimeNumber(): ValidatorFn {
    return (control: AbstractControl): { [key: string]: boolean } | null => {
      if (isPrime(control.value)) {
        return null;
      }
      return {
        isPrimeNumber: true
      };
    };
  }
从'@angular/forms'导入{ValidatorFn,AbstractControl};
//这项职能的功劳:
// https://stackoverflow.com/a/17390131/2044
函数isPrime(编号:number):布尔值{
让我们开始:数字=2;
常数限制:数量=数学sqrt(数量);
同时(开始1;
}
导出类NumberValidator{
静态isPrimeNumber():验证器fn{
return(control:AbstractControl):{[key:string]:boolean}| null=>{
if(isPrime(control.value)){
返回null;
}
返回{
isPrimeNumber:对
};
};
}
这段代码可以工作;但是,在我看来,它似乎是向后的。它似乎是
if
语句向外180度-,当值有效时,它应该返回对象(带有
true
),当值无效时,它应该返回null


所以我的问题是:这是怎么回事?

我承认验证器的返回值看起来有点古怪,但文档中有您需要的所有信息:

接收控件并同步返回验证错误映射(如果存在)的函数,否则返回null

根据定义,当没有错误时,验证器函数返回null。否则,它返回一个由键定义错误的对象

这也正是这个方法签名所说的:

(control: AbstractControl): { [key: string]: boolean } | null 

此验证器函数接受抽象控件类型的输入,并将返回键为字符串且值为布尔值或null的对象。

是的,这在我看来也总是有点倒退。这几乎就像这些应该被称为
无效器
,因为它们在无效时返回
true
。似乎是这样反对“干净代码”原则,因为仅仅阅读它并不能清楚地传达其结果。