Parameters 是 TypeScript 内置工具类型,用于从函数类型中提取参数元组类型;支持普通函数、箭头函数及重载函数(仅最后一重载),常与 ReturnType 等组合使用,需传入函数类型而非调用表达式。

Parameters 是 TypeScript 提供的一个内置工具类型,用于从函数类型中提取其参数的元组类型。它能帮你避免重复书写参数类型,尤其在封装、代理、高阶函数或类型复用场景中非常实用。
Parameters 的基本用法
它接收一个函数类型作为泛型参数,返回该函数所有参数组成的只读元组类型(注意:返回的是 readonly [...] 形式,但通常可直接用于普通元组上下文)。
- 对普通函数:直接传入函数类型即可
- 对箭头函数或方法签名:需用类型别名或接口先定义函数类型
- 支持重载函数,但只提取最后一个重载签名的参数类型(这是 TypeScript 的限制)
常见复用场景示例
比如你想为某个函数写一个包装器,又不想手动重复写它的参数类型:
function fetchData(url: string, timeout: number, retry: boolean): Promise<any> {
// ...
}
// 提取参数类型,复用到 wrapper 中
type FetchParams = Parameters<typeof fetchData> // [string, number, boolean]
function withLogging<F extends (...args: any[]) => any>(fn: F): (...args: Parameters<F>) => ReturnType<F> {
return (...args) => {
console.log('calling with', args);
return fn(...args);
};
}
const loggedFetch = withLogging(fetchData); // 类型自动推导为 (url: string, timeout: number, retry: boolean) => Promise<any>
配合其他工具类型组合使用
Parameters 经常和 ReturnType、Required、Partial 等联用,构建更灵活的类型抽象:
- 想让某函数的所有参数变为必填(即使原函数有可选参数):用
Required<Parameters<F>> - 想只取前两个参数:用
Parameters<F> extends [infer A, infer B, ...any[]] ? [A, B] : never - 想构造一个带默认值的新函数类型:结合
Partial<Parameters<F>>和联合类型
注意事项与陷阱
使用时需留意几个关键点:
- 不能直接传函数调用表达式,必须传函数类型(如
typeof fn或接口中的方法签名) - 若函数参数含 rest 参数(
...args: string[]),Parameters 会将其转为元组末尾的数组项(如[number, ...string[]]) - 对于 this 上下文敏感的函数(如 class 方法),Parameters 不包含 this 类型;需要额外处理
this参数时,建议用条件类型提取


















