接口(interface)的 TypeScript 反射

标签 typescript reflection interface

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

interface ITest {
    readonly foo: number;
}

现在,TypeScript 是否有某种反射或诡计来获取此信息?例如。像这样的东西:

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

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

最佳答案

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

代码

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 writable = true

酒吧可写=真

关于接口(interface)的 TypeScript 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564078/

相关文章:

go - golang中如何匹配两个接口(interface)

带有 XOR 的 TypeScript 接口(interface),{bar :string} xor {can:number}

typescript - 模拟器的 Firebase 功能,部署时忽略

node.js - 在我的模块中的 Nestjs 中导入另一个模块的存储库

c# - 如何使用代码生成动态创建C#方法?

.net - 如何获取.NET中对象的全名?

java - 使用反射从界面获取注释

为返回 char* 的 C 函数创建 FORTRAN 接口(interface)

javascript - 将类型化数组作为 any[] 传递?

typescript - 无法使用 Typescript 和 Aurelia 导入 ramda