Function类型的rest参数类型

时间:2018-05-06 19:51:14

标签: typescript

有没有办法获取函数类型的参数类型?例如:

type MyFn = (a: number, b: string): boolean;
const fnInstance: MyFn = (...args) => true; // args are any[] here, causing `noImplicitAny` flag to issue an error

根据...args类型,有没有办法获得MyFn类型的内容?应该是[number, string]。提前谢谢!

1 个答案:

答案 0 :(得分:0)

不,rest参数必须是array类型。

要避免nomImplicitAny的问题,您只需将其余参数定义为any[]

这不是问题,因为当你使用它时,TypeScript不会关心fnInstance的定义,只是关于你指定的类型,因此,当调用它时,它会期望两个参数,a number一个string

const fnInstance: MyFn = (...args: any[]) => true;

fnInstance(3, "hello"); // right
fnInstance(3, 4); // error

在const定义中,您正在进行以下类型转换:

(...args: any[]) => boolean --> MyFn

所以,最后你最终得到了MyFn。只要函数定义的推断类型可赋予MyFn,就不会有任何问题。在这种情况下,它是可分配的。

但是,如果你试过这个,你会收到错误:

const fnInstance: MyFn = (...args: any[]) => 7;