【问题标题】:Get function parameter names and types in TypeScript在 TypeScript 中获取函数参数名称和类型
【发布时间】:2020-01-19 10:33:03
【问题描述】:

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

类似:

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

type extractedType = ParametersWithName<typeof MyFunc>

extractedType 结果最终为:

{
    a: string, 
    b: string
}

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

【问题讨论】:

  • 在 typescript 4 中 Parameters 也将名称返回为 Labeled Tuple Elements 。但是我仍然不知道将其转换为对象的方法。 keyof extractedType 仍然不返回名称(但返回在这种情况下无关的数组道具)

标签: typescript


【解决方案1】:

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

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

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

所以绝对没有办法使用Parameters&lt;&gt; 或类似的东西将参数名称从函数中提取出来并使用它们。

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

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多