{};
const bar = (arg1: boolean, arg2: { a: "A" }): void => {};
const baz = (): void => {};
type cases = [
Expect// ============= Test Cases =============
import type { Equal, Expect } from "./test-utils";
const foo = (arg1: string, arg2: number): void => {};
const bar = (arg1: boolean, arg2: { a: "A" }): void => {};
const baz = (): void => {};
type cases = [
Expect<Equal<MyParameters<typeof foo>, [string, number]>>,
Expect<Equal<MyParameters<typeof bar>, [boolean, { a: "A" }]>>,
Expect<Equal<MyParameters<typeof baz>, []>>
];
// ============= Your Code Here =============
type MyParameters<T extends (...args: any[]) => any> = T extends (
...args: infer R
) => void
? R
: never;
// usage
首先需要了解 Parameters 是怎么用的
1. type fn1 = (a: string, b: number) => void;
type fn1Params = Parameters<fn1>
// [string, number]
2. type fn1 = (a: string, ...args: any[]) => void;
type fn1Params = Parameters<fn1>
// [string, ...any[]]
如何实现?
1. 描述函数基本形状
2. 提取参数子类型