如何定义省略最后一个参数的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
相关产品推荐
相关产品推荐

