gpt4 book ai didi

typescript - 访问类内的元注释 (TypeScript)

转载 作者:太空狗 更新时间:2023-10-29 16:58:21 28 4
gpt4 key购买 nike

当我在 TypeScript 中用元数据注释一个类时,例如要创建 Angular2 组件,我可以访问该类中的元数据吗?

import {Component} from 'angular2/core';

@Component({
selector: 'app',
templateUrl: '/app/components/app/app.component.html'
})
export class AppComponent {

// can I access 'templateUrl' from above annotation here?

}

最佳答案

对于新的 Angular 版本,你应该使用原生的 Reflect 目的。虽然不支持 IE11:

const annotations = Reflect.getOwnPropertyDescriptor(MyModule, '__annotations__').value;

阅读下面 Jeff Fairley 的回答,了解之后如何处理数据

<罢工>您可以将注释/装饰器视为正常的函数调用。对于这个函数,“类/函数”对象(不是实例)在第一个参数中发送,参数(元数据)在第二个参数中发送。

然而,如果某些东西被添加到类的原型(prototype)中(不良做法/暴露属性),则取决于该函数的实现。不过,TypeScript 编译器和 Angular2 做事的方式不同。

他们使用 __decorate__metadata由 TypeScript 编译器生成的函数。使用 Object.defineProperty() 添加数据功能。负责此的包是 Reflect . (在引擎盖下使用 Object.defineProperty() 函数结合 WeakMap )。

函数Reflect.defineMetadata()用于设置注释,并获得明显的 Reflect.getMetadata() .

TLDR;

    <罢工>
  • 要从 angular2 中的类/组件获取注释,您需要使用:

    Reflect.getMetadata('annotations', ComponentClass); //@Component({}), @Pipe({}), ...
  • 要从 angular2 中的构造函数参数中获取注释,您必须使用:

    Reflect.getMetadata('parameters', ComponentClass); //@Inject()
  • 要从 angular2 中的类中的属性获取注释,您必须使用:

    Reflect.getMetadata('propMetadata', ComponentClass); //@HostBinding(), @Input(), ...

    <罢工>

关于typescript - 访问类内的元注释 (TypeScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com