# 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;

# 知识点

  1. 函数入参推断,可以见 实现 Parameters
  2. 反转元组,可以见 实现 Reverse
Last Updated: 2023/5/16 06:00:28