Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何从函数参数类型中省略第一个参数?_Typescript - Fatal编程技术网

Typescript 如何从函数参数类型中省略第一个参数?

Typescript 如何从函数参数类型中省略第一个参数?,typescript,Typescript,我有一个来自第三方库函数的sendMessage,该函数带有以下参数: function sendMessage(chatId: number | string, text: string, extra?: tt.ExtraEditMessage) 我想创建另一个函数,它将向特定用户发送消息。我希望此函数具有原始函数的所有参数: export async function sendMessageToAdmin(text: string, extra?: tt.ExtraEditMessage)

我有一个来自第三方库函数的
sendMessage
,该函数带有以下参数:

function sendMessage(chatId: number | string, text: string, extra?: tt.ExtraEditMessage)
我想创建另一个函数,它将向特定用户发送消息。我希望此函数具有原始函数的所有参数:

export async function sendMessageToAdmin(text: string, extra?: tt.ExtraEditMessage)
但我希望在更新第三方依赖项时,此类型声明保持干燥并自动更新,因此我可以使用
参数
实用程序类型:

type SendMessageParameters = Parameters<sendMessage>

export async function sendMessageToAdmin(...parameters: SendMessageParameters)
键入SendMessageParameters=参数
导出异步函数sendMessageToAdmin(…参数:SendMessageParameters)
但是,我还想省略第一个参数,
chatId
,因为我将自己设置它。不幸的是,
ommit
实用程序类型仅适用于属性,而不适用于元组成员


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

我可以通过修改原始的
参数来实现:

type ParametersExceptFirst<T extends (...args: any) => any> = T extends (
    ignored: infer _,
    ...args: infer P
) => any ? P : never
类型参数sexceptfirst any>=T扩展(
忽略:推断,
…args:推断P
)=>有吗?P:从来没有

只需返回元组的尾部即可

函数sendMessage(foo:number,baz:string,bar:number[]){
类型Tail=T扩展[推断头部,…推断尾部]?尾巴:永远不会;
函数otherFunc(…参数:Tail){}//baz:string,bar:number[]

在这里您可以找到如何在TS 3中实现它。*谢谢!我更喜欢这个而不是我的解决方案,因为它让我有了更多的可组合的实用程序类型。