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

如何正确为TypeScript函数传递指定函数类型参数与对应入参

错误原因

TypeScript对函数联合类型做参数逆变推导时,为了保证类型安全,要求传入的参数必须同时满足联合中所有函数的参数要求。你定义的Func是(name:string)=>string和(age:number)=>number的联合,参数推导后得到的合法入参类型是string & number,也就是不存在的never类型,因此触发类型报错。

正确写法(函数重载方案,符合约束要求)

你可以通过函数重载显式限定仅允许两种合法的调用组合,完全符合「仅允许传入func1或func2类型」的要求:

function func1(name: string) {
  return name;
}

function func2(age: number) {
  return age;
}

type Func = typeof func1 | typeof func2;

// 重载签名,限定仅支持两种调用场景
function func3(func: typeof func1, arg: string): string;
function func3(func: typeof func2, arg: number): number;

// 实现签名
function func3(func: Func, arg: string | number) {
  // 可选:增加类型收窄,保证运行时类型也安全
  if (func === func1) {
    return func(arg as string);
  }
  return func(arg as number);
}

const x = func3(func1, 'hello'); // 自动推导为string类型
const y = func3(func2, 5); // 自动推导为number类型

这种写法下,如果传入非func1/func2的函数,或者参数类型和函数不匹配,TypeScript都会直接抛出错误,完全满足约束要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:51:01