TypeScript函数forbiddenNameValidator语法疑问:函数标识确认
理解Angular自定义表单验证器的TypeScript语法
先看你给出的这段自定义验证器代码:
export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn { return (control: AbstractControl): {[key: string]: any} | null => { const forbidden = nameRe.test(control.value); return forbidden ? {'forbiddenName': {value: control.value}} : null; }; }
你的初步理解完全正确:
forbiddenNameValidator:这是我们自定义的工厂函数名称,用来生成特定规则的表单验证器nameRe: RegExp:工厂函数的入参,接收一个正则表达式,用来指定要禁止的名称匹配规则ValidatorFn:工厂函数的返回类型,它是Angular表单模块提供的核心接口
接下来看你提到的ValidatorFn接口定义:
interface ValidatorFn { (control: AbstractControl): ValidationErrors | null }
你问「此处哪个符号表明这是函数」——其实这是TypeScript里函数类型表达式的写法,整个(control: AbstractControl): ValidationErrors | null就代表一个函数类型:
- 括号
()包裹的是函数的参数列表(要求接收一个类型为AbstractControl的参数control) - 冒号后面的
ValidationErrors | null是这个函数的返回类型 - 这种写法是用来在接口里定义「该接口代表一个符合此签名的函数」,和你熟悉的箭头函数
=>不同:=>是用来创建实际的函数实例的语法,而这种括号+参数+返回类型的写法是用来描述函数的类型结构的。
简单来说,这个接口的意思就是:任何符合「接收AbstractControl参数,返回ValidationErrors或者null」规则的函数,都属于ValidatorFn类型。
内容的提问来源于stack exchange,提问作者Aquarius_Girl
相关产品推荐
相关产品推荐

