(управление: AbstractControl): - PullRequest
0 голосов
/ 29 мая 2018

Вот фрагмент кода, извлеченного из 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): () => {}

Набирает ли оно то, что возвращает лямбда-функция?Предполагается, что ForbiddenNameValidator возвращает ValidatorFn. Следует ли понимать ValidatorFn как ValidatorFonction?

1 Ответ

0 голосов
/ 29 мая 2018

Если вы изучите определение интерфейса 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...