在使用 TypeScript 开发的过程中,类型定义是一个必要但又繁琐的过程。
当需要对一个第三方库方法的入参进行单独定义,而该库又没有导出该方法的入参类型时,就需要获取该方法的入参类型。
例如,有如下示例函数,我们想获取其参数类型和返回值类型,那么具体应该如何实现呢。
示例函数:
function test(lzwme: string, idx: number) { return { lzwme, idx, }; }
1 获取函数的参数类型
使用预定义的 Parameters
可以获取到一个函数的参数类型列表。
获取 test
函数的参数类型:
type TestArgsType = Parameters<typeof test>; // TestArgsType => [lzwme: string, idx: number]
获取 idx
参数的类型:
type TestArgsType = Parameters<typeof test>[1]; // TestArgsType => idx: number
我们看一下 Parameters
的定义:
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
我们可以看到,其实它主要是通过 infer P
获取到 T
的参数类型列表 P
并返回,如果 T 不是函数则返回 never
。
2 获取函数的返回值类型
使用预定义的 ReturnType
可以获取到一个函数的参数类型列表。
获取 test
函数的返回值类型:
type TestReturnType = ReturnType<typeof test>;
我们再看一下 ReturnType
的定义:
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
与 Parameters
十分类似,不同的是通过 infer R
获取并返回 T
的返回值类型。
专研技术的大咖啊
博主你好,你的近期评论是用什么插件实现的?我的用了插件怎么不显示呢!
https://iboge.com