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

如何创建类型表达式的可复用类型?类型命名规范咨询

解决方案

1. 先定义目标联合类型

首先把要断言的类型集合抽成独立的联合类型,方便后续复用:

type FormGroupOrArray = UntypedFormGroup | UntypedFormArray;

2. 定义可复用的类型守卫函数类型

因为x is T这种类型谓词语法必须依附于函数签名,所以我们要定义的是类型守卫函数的类型别名,而不是单独的谓语句法:

type FormGroupOrArrayGuard = (control: AbstractControl) => control is FormGroupOrArray;

之后就可以在多个函数中复用这个类型,示例如下:

// 第一个类型守卫函数
private isFormArrayOrGroup: FormGroupOrArrayGuard = (control) => {
  return control instanceof UntypedFormGroup || control instanceof UntypedFormArray;
};

// 第二个同类型的守卫函数
private anotherFormGuard: FormGroupOrArrayGuard = (control) => {
  // 自定义判断逻辑
  return !!(control as UntypedFormGroup).controls || !!(control as UntypedFormArray).controls;
};

命名规范

  • 目标联合类型:直接使用语义化的组合名称,比如FormGroupOrArray,清晰表明这是UntypedFormGroup和UntypedFormArray的联合类型。
  • 类型守卫函数类型:通常在目标类型名后添加Guard后缀,比如FormGroupOrArrayGuard,明确标识这是一个类型守卫函数的类型;也可以采用Is[TargetType]Guard的格式,比如IsFormGroupOrArrayGuard,更直观体现“判断是否为某类型”的语义。

为什么直接定义type FormType = formControl is ...无效?

formControl is T是TypeScript的类型谓词语法,它只能作为函数的返回类型使用,用来在函数执行后缩小参数的类型范围。它本身不是一个独立的类型,必须绑定到具体的函数参数签名上,因此无法单独抽成类型别名。


内容的提问来源于stack exchange,提问作者RobSeg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:46:11