# 3196-反转入参
# 题目描述
Implement the type version of lodash's _.flip
.
Type FlipArguments<T>
requires function type T
and returns a new function type which has the same return type of T but reversed parameters.
For example:
type Flipped = FlipArguments<
(arg0: string, arg1: number, arg2: boolean) => void
>;
// (arg0: boolean, arg1: number, arg2: string) => void
# 分析
这个题目出的很好,刚好上一题实现了 Reverse,这一题就要反转入参。
所以就分成了两步,第一步,匹配入参,第二步,反转入参。
# 题解
// 实现反转
type Reverse<T> = T extends [...infer F, infer R] ? [R, ...Reverse<F>] : [];
// 推断函数入参,并将参数反转后作为返回
type FlipArguments<T extends Function> = T extends (...args: infer A) => infer R
? (...args: Reverse<A>) => R
: never;
# 知识点
- 函数入参推断,可以见 实现 Parameters。
- 反转元组,可以见 实现 Reverse