【问题标题】:TypeScript reflection for interfaces接口的 TypeScript 反射
【发布时间】:2017-05-24 15:53:26
【问题描述】:

有没有办法查明接口的属性是否定义为只读?说,

interface ITest {
    readonly foo: number;
}

现在,TypeScript 是否有某种反射或诡计来获取这些信息?例如。类似:

let info = Reflect.get(ITest, 'foo');

if (info.isReadOnly()) { ... }

【问题讨论】:

  • I'm a fraid not。尤其是 javascripts duck typing.
  • 接口在运行时不可用,所以我不知道你是否可以对它们进行反射调用。
  • @toskv 这不是重点,这只是一个例子。我不想要运行时间,我想要编译时间。

标签: typescript reflection interface


【解决方案1】:

由于 TypeScript 接口在运行时不存在,因此您不能对它们使用反射。为了使用反射,我创建了一个实现接口并反映在类上的类。但是,我无法判断一个属性是否是只读的。不确定这是我缺乏理解还是缺陷。这是我尝试过的:

代码

interface ITest {
  readonly foo: number;
  bar: number;
}
class TestImplementation implements ITest {
  readonly foo: number = 1;
  bar: number = 2;
}
function reflectOnTest() {
  var testImplementation = new TestImplementation();
  var properties: string[] = Object.getOwnPropertyNames(testImplementation);
  var fooDescriptor = Object.getOwnPropertyDescriptor(testImplementation, properties[0]);
  var barDescriptor = Object.getOwnPropertyDescriptor(testImplementation, properties[1]);
  console.log("foo writable = " + fooDescriptor.writable);
  console.log("bar writable = " + barDescriptor.writable);
}

输出为:

foo 可写 = true

条形可写 = true

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2019-01-06
    • 2016-06-16
    • 2011-10-18
    • 1970-01-01
    • 2016-04-16
    • 2012-05-06
    • 2017-12-11
    相关资源
    最近更新 更多