shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.88k stars 504 forks source link

【Q694】在 ts 中什么是 infer,并实现 Parameters 与 ReturnType #715

Open shfshanyue opened 2 years ago

heretic-G commented 2 years ago
type Parameters<T extends (...args: any[]) => unknown> = T extends (...args: infer R) => unknown ? R : never
zhimazz commented 2 years ago

Parameters 是啥

Asarua commented 2 years ago

Parameters 是啥

取得某个函数的参数类型的高级类型

iceycc commented 2 years ago

Parameters 的作用是用于获得函数的参数类型组成的元组类型。

type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any 
  ? P : never;
type A = Parameters<() => void>; // []
type B = Parameters<typeof Array.isArray>; // [any]
type C = Parameters<typeof parseInt>; // [string, (number | undefined)?]
type D = Parameters<typeof Math.max>; // number[]