共计 806 个字符,预计需要花费 3 分钟才能阅读完成。
提醒:本文最后更新于2025-07-07 14:43,文中所关联的信息可能已发生改变,请知悉!
在使用 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
的返回值类型。
正文完
发表至: 前端开发
2020-11-17