【问题标题】:Method of getting a list of all Private members in Typescript?在 Typescript 中获取所有 Private 成员列表的方法?
【发布时间】:2019-04-14 13:23:31
【问题描述】:

正如标题所说,我希望能够获得一个 Typescript 类/实例的私有成员列表。

我在测试期间尝试过这个,但我担心我会获取所有成员并且无法判断成员在运行时是否是私有的。此外,我不确定如何对静态成员做同样的事情。

type Constructor<T> = new () => T;

export default function <T> (classX: Constructor<T>) {
    var c = new classX()
    var made = Object.getOwnPropertyNames(c);

    for (var i of made) { console.log(i) }
}

【问题讨论】:

  • "...无法判断成员在运行时是否为私有..." 使用 TypeScript 的私有版本,在运行时没有私有成员是私有的.他们都是公开的。 TypeScript 的 private 纯粹是关于类型系统,而不是运行时。 (不回答,因为这没有回答如何获取私有成员列表以进行测试的问题,如果可以的话。)
  • (相比之下,JavaScript 自己的私有,class fields proposal 的一部分,即将进入第 4 阶段,是真正私有的。)

标签: typescript types private private-members


【解决方案1】:

也许只是在你的方法前面加上 private_ 并获取私有成员,因为在运行时所有只是对象的属性,在 js 中没有反射。这可以在 typescript 中使用reflect-metadata 来实现,但您仍然需要指定私有方法的数组。或者只需创建__privateMembers____ 静态属性来跟踪此元数据(通常这是在动态类型语言中完成的,如 js 和 python )

【讨论】:

  • 这个问题是因为我正在做一个包,我不知道我在接受什么类。
猜你喜欢
  • 2015-06-04
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2021-12-03
  • 2019-02-01
相关资源
最近更新 更多