通过 TypeScript 中的属性装饰器覆盖对象的子属性的 getter 和 setter

共0个回答, 标签: angular typescript decorator

我在和装饰师一起玩,以了解他们的局限性和目的。我想创建一个简单的自定义属性装饰器来覆盖对象中的 id 属性。

呼叫:

@ 组件 ({.})
导出类 PageComponent {
.
数据: 对象 [] = [];
列: TableColumn [] = [];
@ Table ({id: 'mytableid'}) table = 新的 MyTable (这个.数据,这个.列);
.
}

装饰器:

导出函数表 (选项: 任何) :( 目标: 任何,属性键: 字符串 | 符号) => void {
返回函数 (目标: 任何,属性键: 字符串) {

让 IDgetter = (): string => {
返回选项。id;
}

让 IDsetter = (id: string) => {
目标 [属性键]。id = 选项。id;
}

Console.log (目标、属性键、目标 [属性键] 、选项);
//PageComponent,'table',未定义,{id: 'mytableid'}

如果 (删除目标 [属性键].id) {
对象.De fineProperty (目标 [属性键],'id',{
获取: IDgetter,
设置: IDsetter,
可枚举: 真
可配置: 真
});
}

}
}

正如注释所示,我无法达到 id,因为目标 [propertyKey] 未定义。好吧,我知道对象还不存在,这就是为什么在上下文中没有设置的值。有没有其他方法来实现这样的东西?

我的目标将是一个装饰链,我可以使用装饰器添加功能的新实例。MyTableLike:

@ Table ({id: 'mytableid'})
@ CustomizableColumns ({
默认列: [“日期” 、 “名称” 、 “年龄” 、 “性别”]
})
@ FilterTable (行: 对象) => {返回年龄> 18})。绑定 (这个))
表 = 新我的表 ([.],['日期','年龄','名字','性别','身份','数字','v',.])

另一方面,所有这些装饰器都与我无法达到 MyTable 实例的子属性的问题有关。

相关问题

从 angularcli 中的 HTTP Get 请求检索到的数组的范围 如何将角2前置快速 JS 变量导出到角2分量? Angular block web 请求使用的服务器吗? 在类实例中跟踪状态 如何解决: “找不到规则 '@ typescript-eslint/一致类型断言' 的定义” 如何将月份值从一个日期对象复制到另一个日期对象?[复制] 如何为方法创建装饰器 通过 TypeScript 中的属性装饰器覆盖对象的子属性的 getter 和 setter