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中实现它。*谢谢!我更喜欢这个而不是我的解决方案,因为它让我有了更多的可组合的实用程序类型。