首页 > 解决方案 > 如何从函数参数类型中省略第一个参数?

问题描述

我有一个sendMessage带有参数的第三方库函数:

function sendMessage(chatId: number | string, text: string, extra?: tt.ExtraEditMessage)

我想创建另一个向特定用户发送消息的函数。我希望这个函数具有原始函数的所有参数:

export async function sendMessageToAdmin(text: string, extra?: tt.ExtraEditMessage)

但是我希望这个类型声明是 DRY 并在我更新第三方依赖项时自动更新,所以我可以使用Parameters实用程序类型:

type SendMessageParameters = Parameters<sendMessage>

export async function sendMessageToAdmin(...parameters: SendMessageParameters)

但是,我也想省略第一个参数 ,chatId因为我将自己设置它。不幸的是,Omit实用程序类型仅适用于属性而不适用于元组成员。

如何构造一个类型,它将具有函数的所有参数,而不是第一个参数或具有特定名称的参数?

标签: typescript

解决方案


你只需要返回元组的尾巴

function sendMessage(foo: number, baz: string, bar: number[]) { }

type Tail<T extends unknown[]> = T extends [infer Head, ...infer Tail] ? Tail : never;

function otherFunc(...parameters:Tail<Parameters<typeof sendMessage>>){} // baz: string, bar: number[]

推荐阅读