【问题标题】:Use decorator to add meta data to interface properties使用装饰器将元数据添加到接口属性
【发布时间】:2017-07-30 16:44:27
【问题描述】:

是否可以使用装饰器通过一些自定义信息来标记接口的某些属性?

最好用一个例子来解释:

应用状态界面:

export interface AppState {
    @persist userData: UserData,
    @persist selectedCompany: UserCompany,

    // userCompanies should not be persisted since they are always
    // fetched afresh from the server...
    userCompanies: UserCompany[]
}

保留所有相关状态信息的方法:

persistState(state) {
    let newState = {};

    Object.keys(state).forEach((key) => {
        if (state[key] is decorated with @persist) {
            newState[key] = state[key];
        }
    });

    // Persist newState...
}

这可能吗?
如果是这样,我真的很感激一些资源可以为我指明正确的方向!
如果没有,是否有任何优雅的替代方案?

【问题讨论】:

  • 不,你不能在接口上使用装饰器,就像docs say:“装饰器提供了一种为类声明和成员添加注释和元编程语法的方法”。接口在运行时不存在,这就是您不能向它们添加装饰器的原因。您可以将接口更改为类,然后一切顺利
  • 我是这么认为的。我的应用程序状态需要由纯 JS 对象(redux)构建,这就是为什么我不能为此使用类...
  • 装饰器是一个实验性的特性(至少对于ECMAScript而言)。它们不是 ES7 的一部分。
  • 有人也需要这个功能:issue

标签: typescript interface decorator


【解决方案1】:

是否可以使用装饰器通过一些自定义信息来标记接口的某些属性

没有。接口不能与装饰器一起使用,因为装饰器在运行时实际存在的事物之上工作。 (接口被删除)。

【讨论】:

  • 有没有其他方法可以将元数据添加到接口属性中?
  • 让它成为一个类
  • 但是类的问题,需要构造函数
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2021-03-11
  • 2023-03-10
  • 2020-06-20
  • 2018-03-08
  • 2021-01-05
  • 2018-06-05
相关资源
最近更新 更多