推荐答案
Parameters<T>
是 TypeScript 中的一个实用工具类型,用于提取函数类型 T
的参数类型,并将其作为一个元组类型返回。它通常用于获取函数的参数类型,以便在其他地方使用。
示例
function foo(a: number, b: string): void { console.log(a, b); } type FooParams = Parameters<typeof foo>; // [number, string]
在这个例子中,FooParams
类型被推断为 [number, string]
,即 foo
函数的参数类型。
本题详细解读
实现原理
Parameters<T>
的实现依赖于 TypeScript 的条件类型和 infer
关键字。它的定义如下:
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
解析
- 约束条件:
T extends (...args: any) => any
表示T
必须是一个函数类型。 - 条件类型:
T extends (...args: infer P) => any
表示如果T
是一个函数类型,那么infer P
会推断出函数的参数类型P
。 - 返回类型:如果条件成立,返回
P
,即函数的参数类型;否则返回never
。
使用场景
Parameters<T>
通常用于以下场景:
- 提取函数的参数类型,以便在其他地方复用。
- 在泛型编程中,动态获取函数的参数类型。
示例分析
function bar(x: boolean, y: number[]): void { console.log(x, y); } type BarParams = Parameters<typeof bar>; // [boolean, number[]]
在这个例子中,BarParams
类型被推断为 [boolean, number[]]
,即 bar
函数的参数类型。