如何使用装饰器向类中添加新属性或方法?

时间:2018-05-25 12:44:53

标签: typescript decorator

基本上same question as this。但是还有更多的要求。

  1. 如何使用属性装饰器而不是装饰器向类添加新属性/方法?
  2. 关键是 - 如何自动以类型安全的方式执行此操作? TypeScript是否支持推断添加的密钥?在earlier example中,我们必须手动添加类型信息。 TypeScript可以推断它吗?
  3. 一个例子:

    class HeaderComponent extends Vue {
    
        // @Stream$ should add key teanantId$ to class?
        @Stream$((store) => store.urlState.tenantId)
        public tenantId: number;
    }
    

    这是它应该如何运作的:

    const a = new HeaderComponent();
    
    // works
    a.tenant;
    
    // CAN THIS WORK?
    a.tenantId$;
    

1 个答案:

答案 0 :(得分:0)

ClassScript中的类装饰器变异is not supported

装饰类需要合并声明才能明确定义新属性:

interface HeaderComponent {
    tenantId$: Observable<number>;
}
class HeaderComponent extends Vue {
    @Stream$((store) => store.urlState.tenantId)
    public tenantId: number;
}

由于tenantId$属性名称是运行时计算的结果,因此将来不可能进行推理。