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

学习TypeScript遇到术语arity不理解,求其计算机领域定义及文档说明

术语arity的定义

arity(元数)是计算机领域用来描述函数接收的参数数量的术语:

  • 不接收参数的函数arity为0,也叫零元函数
  • 接收1个参数的函数arity为1,也叫一元函数
  • 接收2个参数的函数arity为2,也叫二元函数,以此类推
TypeScript文档片段解释

这段是TypeScript类型声明编写规范中关于「重载与回调」的注意事项,核心规则如下:

错误写法说明

不要编写仅在回调arity上存在差异的独立重载:

/* WRONG */
declare function beforeAll(action: () => void, timeout?: number): void;
declare function beforeAll(
  action: (done: DoneFn) => void,
  timeout?: number
): void;

这种写法完全多余,还会引入类型安全隐患:

  • 在JavaScript/TypeScript中,回调忽略传入的参数是完全合法的行为:哪怕你要求回调是接收1个done参数的类型,用户传入无参的回调也完全符合要求,不需要单独为无参回调写一个重载
  • 重载是按从上到下的顺序匹配的,把无参回调的重载放在前面,会导致一些不符合预期的函数也能通过类型校验。比如用户传入一个接收number类型参数的回调,会优先匹配到第一个无参回调的重载,TypeScript不会报错,但实际运行时beforeAll会给回调传入DoneFn类型的参数,就会出现类型不匹配的运行时问题。

正确写法说明

请使用最大arity编写单个重载:

/* OK */
declare function beforeAll(
  action: (done: DoneFn) => void,
  timeout?: number
): void;

只写要求回调arity最大的那一个重载就足够:既兼容用户不传done参数的无参回调场景,又能避免前面提到的类型匹配漏洞。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:24:09