Если вы изучите определение интерфейса ValidatorFn
, он будет иметь следующий шаблон -
interface ValidatorFn {
(c: AbstractControl): ValidationErrors | null
}
, что означает, что вы можете вернуть любую функцию, которая принимает аргумент типа AbstractControl
и возвращает любой тип ValidationErrors
(который на самом деле является псевдонимом типа) или null
.
Вот определение ValidationErrors
, оно имеет подпись индекса ниже
type ValidationErrors = {
[key: string]: any;
};
Так что ваш пример ниже
return (control: AbstractControl): {[key: string]: any} => {
// other code
return forbidden ? {'forbiddenName': {value: control.value}} : null; // check this line it's corresponds to ValidationErrors | null
}
фактически возвращает функцию с той же подписьюкоторый совместим с шаблоном интерфейса ValidatorFn
.
(control: AbstractControl): {[key: string]: any} =>
{
return forbidden ? {'forbiddenName': {value: control.value}} : null;
}
проверьте эту ссылку для справки: https://angular.io/api/forms/ValidatorFn#call
Таким образом, идея функции forbiddenNameValidator
состоит в том, чтобы возвращать функцию ста же подпись, что и у свойства ValidatorFn
interface