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

如何定义省略最后一个参数的TypeScript函数类型?

解决方案

你当前的写法问题出在Exclude的使用上——Exclude是用于联合类型的排除操作,而Parameters<A>返回的是一个元组类型[string, Callback],所以这种写法无法正确截取掉最后一个参数。

要实现“省略函数类型最后一个参数”的需求,可以借助TypeScript的条件类型+元组推断来提取目标参数列表:

type Callback = (msg: string) => void;

type A = (a: string, b: Callback) => void;

// 定义一个工具类型,用于移除函数类型的最后一个参数
type OmitLastParameter<T extends (...args: any[]) => any> = 
  T extends (...args: [...infer P, last: any]) => infer R 
    ? (...args: P) => R 
    : never;

// 用工具类型生成类型B
type B = OmitLastParameter<A>;

const b: B = (...args) => {};

b("some string"); // 现在正常通过类型检查

代码解释

  • OmitLastParameter工具类型通过条件类型匹配函数类型,用...infer P推断出除最后一个参数外的所有参数组成的元组P,同时保留原函数的返回类型R。
  • 这样生成的B类型就等价于(a: string) => void,正好符合你“省略A的最后一个参数”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:22:36