【问题标题】:How to get a function parameter types如何获取函数参数类型
【发布时间】:2020-08-22 05:45:49
【问题描述】:

我可以使用 ReflectAPI 轻松获取方法的参数类型:

Reflect.getMetadata('design:paramtypes', target, propertyKey);

但是,当我尝试获取函数的参数类型时,它总是返回未定义。我尝试过使用这些示例函数:

const foo = (bar: Bar) => void 0;

function foo(bar: Bar) {}
export function foo(bar: Bar) {}

我还读到 TypeScript 仅在您装饰类和方法时发出元数据。那么,如何获取函数的元数据呢?

【问题讨论】:

    标签: typescript parameters reflect reflect-metadata


    【解决方案1】:

    如果您要在 运行时 获取函数参数类型,那么在撰写本文时这是不可能的,因为 TypeScript 不支持这一点,因为 type erasure 在编译期间。换句话说,一旦 TypeScript 被编译成 JavaScript,类型信息就会被丢弃。

    但是,如果您正在讨论获取函数参数的类型compile-time,那么可以使用Conditional Type。答案在https://stackoverflow.com/a/51851844/6587634

    【讨论】:

    • 这是不正确的。可以在运行时使用装饰器、反射 API 并在 tsconfig 中启用某些标志来获取某些类型。一直使用它的流行框架是 Angular。
    • @LazarLjubenović 你介意提供一个例子吗?
    • OP 的帖子有一个design:paramtypes 的代码 sn-p。在此页面上搜索“reflect-metadata”:typescriptlang.org/docs/handbook/decorators.html
    • 如果这是正确的,我认为您应该能够为 OP 提供一个工作示例?
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多