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

asg*_*las 7 typescript

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

就像是:

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

type extractedType = ParametersWithName<typeof MyFunc>
Run Code Online (Sandbox Code Playgroud)

extractedType结果最终为:

{
    a: string, 
    b: string
}
Run Code Online (Sandbox Code Playgroud)

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

jca*_*alz 8

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

TypeScript 3.0 中通过microsoft/TypeScript#24897引入了在函数参数列表和元组类型之间进行转换的能力。这就是Parameters<>可能的原因。该拉取请求对参数名称有以下注释:

请注意,当从参数序列中推断出元组类型并随后扩展为参数列表时,...在扩展中使用原始参数名称(但是,名称没有语义意义,否则无法观察)。

所以绝对没有办法使用Parameters<>或类似的方法从函数中提取参数名称并使用它们。

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