Вот фрагмент кода, извлеченный из https://angular.io/guide/form-validation#custom-validators
/** A hero's name can't match the given regular expression */
export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} => {
const forbidden = nameRe.test(control.value);
return forbidden ? {'forbiddenName': {value: control.value}} : null;
};
}
Что происходит на третьей строчке:
return (control: AbstractControl): () => {}
Он набирает то, что вернет лямбда-функция? запрещено имяValidator должен возвращать ValidatorFn, следует ли понимать ValidatorFn как ValidatorFonction?
Я также добавил ссылку



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы изучите определение интерфейса 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.
вы можете проверить мой ответ для объяснения.