ReturnType<T> 提取函数的返回类型.
有没有办法定义ArgumentsType<T>以tuple格式提取函数的参数类型?
例如,
ArgumentsType<(a: number, b: string) => boolean>会的[number, string].
Tit*_*mir 16
编辑
自编写原始答案以来,typescript现在具有内置类型(定义lib.d.ts)以获取所调用参数的类型Parameters
type argsEmpty = Parameters<() => void> // []
type args = Parameters<(x: number, y: string, z: boolean) => void> // [number, string, boolean]
type argsOpt = Parameters<(x: number, y?: string, z?: boolean) => void> // [number, (string | undefined)?, (boolean | undefined)?]
Run Code Online (Sandbox Code Playgroud)
编辑 Typescript 3.0已经被解释下面的代码按预期工作.
虽然这在当前版本的typescript(2.9)中是不可能的,但没有拼写出所有参数.在将于未来几天发布的下一版本的typescript(3.0)中,它将成为可能:
type ArgumentsType<T> = T extends (...args: infer U) => any ? U: never;
type argsEmpty = ArgumentsType<() => void> // []
type args = ArgumentsType<(x: number, y: string, z: boolean) => void> // [number, string, boolean]
type argsOpt = ArgumentsType<(x: number, y?: string, z?: boolean) => void> // [number, (string | undefined)?, (boolean | undefined)?]
Run Code Online (Sandbox Code Playgroud)
如果您安装了,npm install typescript@next您已经可以使用它,它应该在本月某个时候可用.
注意
我们还可以使用这个新功能将元组传播到参数中:
type Spread<T extends any[]> = (...args: T)=> void;
type Func = Spread<args> //(x: number, y: string, z: boolean) => void
Run Code Online (Sandbox Code Playgroud)
您可以在此处详细了解此功能
从 TypeScript 3.1 开始,Parameters类型现在是标准库的一部分。
type Result = Parameters<(a: number, b: string) => boolean>; // [number, string]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |