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

TypeScript中调用函数联合类型为何不触发类型错误?

为什么TypeScript允许给联合类型函数传入多余参数?

给定以下TypeScript代码,higherOrder函数接收F类型(F1与F2的联合类型)的参数f,其中F2类型的函数仅需一个参数,但调用f时传入了两个参数,TypeScript编译器却没有报错,这是为什么?

type F1 = (a: number, b: number) => number;
type F2 = (a: number) => number;
type F = F1 | F2;

const f1: F1 = (a: number, b: number) => a + b;
const f2: F2 = (a: number) => 2 * a;

const higherOrder = (f: F): number => {
  return f(2, 3);
}

const result1 = higherOrder(f1);
const result2 = higherOrder(f2);
console.log(result1, result2);

这是由TypeScript的联合类型函数调用规则和JavaScript的函数特性共同决定的:

  • JavaScript函数特性:JavaScript函数本身允许接收多余参数,多余的参数会被直接忽略,不会触发运行时错误。比如f2(2, 3)在JS环境中完全合法,函数只会使用第一个参数2。
  • TypeScript联合类型函数的调用检查逻辑:当调用联合类型的函数时,TypeScript要求传入的参数必须能被联合类型中的每一个函数成员接受。对于F2类型的函数(a: number) => number,传入两个number参数是符合要求的——它只校验第一个参数的类型是否正确,第二个参数的存在不会违反类型约束。而F1类型的函数本身就需要两个number参数,自然也满足要求。

因此,传入2和3这两个参数对F联合类型中的两个成员函数都有效,TypeScript编译器不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:42:14