typescript - 如何从函数参数类型中省略第一个参数?
问题描述
我有一个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
实用程序类型仅适用于属性而不适用于元组成员。
如何构造一个类型,它将具有函数的所有参数,而不是第一个参数或具有特定名称的参数?
解决方案
你只需要返回元组的尾巴
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[]
推荐阅读
- python - Python:按多列熊猫分组
- ios - “使用未解析的标识符” 无法为我的生活弄清楚发生了什么。(Xcode,斯威夫特)
- python - 是否可以基于某些列查找从 CSV 文件中读取数据,而无需将整个文件读入内存?
- flutter - NotifyListeners() 在 Flutter 中不能正常工作
- javascript - 使用制表符创建页面持久性
- c# - Release模式下的程序集反射问题
- java - java中的Haskell,我如何在java中实现“any”(haskell)?
- cypress - 赛普拉斯断言等于和大于
- mysql - 如何在 MySQL 中连接此脚本中的列?
- php - 具有动态 url 段的 nginx php-fpm 未被 php-fpm 解析