在TypeScript中获取函数参数名称和类型

时间:2019-09-18 12:50:00

标签: typescript

我在TypeScript中使用了Parameters<T>类型,该类型返回带有参数类型的元组。现在我想知道是否有一种方法不仅可以返回参数的类型,还可以返回名称?

类似的东西:

function MyFunc(a: string, b: boolean, ...args: string[]) {}

type extractedType = ParametersWithName<typeof MyFunc>

extractedType结果的结尾为:

{
    a: string, 
    b: string
}

我会使用它从常规函数参数转换为接收参数对象的函数(例如React props)。

1 个答案:

答案 0 :(得分:1)

无论好坏,参数名称都不是函数类型的一部分。例如,就类型兼容性而言,类型签名(foo: string) => void(bar: string) => void完全相同。名称foobar(通常)被IntelliSense保留为帮助开发人员的一种文档形式,但实际上它们是实现细节。而且,由于没有一种方法可以区分仅因参数名称而不同的两个函数类型,因此没有提供将这些名称转换为字符串文字类型以用作对象类型的机制。

通过introduced in TypeScript 3.0通过microsoft/TypeScript#24897在函数参数列表和元组类型之间进行转换的能力。这就是使Parameters<>成为可能的原因。该拉取请求对参数名称有以下说明:

  

请注意,当从参数序列推断出元组类型并随后将其扩展为参数列表时,...扩展中使用了原始参数名称(但是,这些名称没有语义含义,因此无法观察到。 )。

因此,绝对没有办法使用Parameters<>或类似的东西来从函数中提取参数名称并使用它们。

对不起,您没有更好的答案。希望无论如何都会有所帮助;祝你好运!