如何使用Reflection API在TypeScript中获取数组项目类型?

在TypeScript中我有以下小班,装饰了一些公共字段:

class Company {
    @dataMember
    public name: string;

    @dataMember
    public people: Person[];
}

class Person {
    // ...
}

通过使用反射元数据,我可以确定公司属性名称和人员的类型:它们分别是构造函数String和Array,这是预期的和逻辑的。

我的属性装饰函数:

function decorate(target: Object, propertyKey: string | symbol): void {
    var reflectType = Reflect.getMetadata("design:type", target, propertyKey);
    // ...
}

但我怎么能确定数组元素的类型(构造函数)? 它甚至有可能吗? 在上面的例子中,它应该是(引用)Person。


注意:在实例化之前需要类型引用,因此无法使用数组项来动态确定类型:没有数组项,甚至没有数组实例。


至今我认为这是不可能的。 如果您看到生成的js文件(对于任何数组),它会创建类型为Array的元数据,但不包含任何类型信息。

__decorate([
    dataMember_1.dataMember, 
    __metadata('design:type', Array)
], Company.prototype, "people", void 0);

对于内置类型,我可以想到解决这个问题的一种方式是在装饰器本身中传递类型,并在装饰器代码中编写自定义逻辑。

@dataMember(String)
myProp: Array<String>

对于自定义对象,大多数时候装饰器调用被触发时,模块没有被完全加载。 所以,一种方法是传递类名并稍后解析它。

@dataMember("People")
people: People[]
链接地址: http://www.djcxy.com/p/89861.html

上一篇: How do I get array item type in TypeScript using the Reflection API?

下一篇: Google Drive frontend UI event listeners