You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:22:42