如何使用 Typescript 中的代理为新 属性 添加 getter
How to add a getter for a new property with a Proxy in Typescript
我有一个对象,我想添加一个新的 属性 到:
this.exampleConfig = new Proxy(config, {
set: (obj, prop, value) => {
...
}
}
我在 angular 应用程序中使用它,目前有一个 exampleConfig.myProperty
。我想添加一个 exampleConfig.myExtendedProperty
我试过了
this.fileConfig = new Proxy(config, {
set: (obj, prop, value) => {
...
},
get: function (obj, prop, receiver) {
if (prop === "myExtendedProperty") {
return obj.myProperty.toUpperCase()+'_EXTENSION';
}
return Reflect.get(...arguments);
},
});
但是,编译器抛出:
Error ... : Expected 2-3 arguments, but got 0 or more.
return Reflect.get(...arguments);
node_modules/typescript/lib/lib.es2015.reflect.d.ts:26:18
26 function get(target: object, propertyKey: PropertyKey, receiver?: any): any;
~~~~~~~~~~~~~~
An argument for 'target' was not provided.
我该怎么办?
根据 Get Off My Lawn 的建议,
这可以用
解决
return Reflect.get(obj, prop, receiver)
所以在这种情况下
get: function (obj, prop, receiver) {
if (prop === "myExtendedProperty") {
return obj.myProperty.toUpperCase()+'_EXTENSION';
}
return Reflect.get(obj, prop, receiver)
},
我有一个对象,我想添加一个新的 属性 到:
this.exampleConfig = new Proxy(config, {
set: (obj, prop, value) => {
...
}
}
我在 angular 应用程序中使用它,目前有一个 exampleConfig.myProperty
。我想添加一个 exampleConfig.myExtendedProperty
我试过了
this.fileConfig = new Proxy(config, {
set: (obj, prop, value) => {
...
},
get: function (obj, prop, receiver) {
if (prop === "myExtendedProperty") {
return obj.myProperty.toUpperCase()+'_EXTENSION';
}
return Reflect.get(...arguments);
},
});
但是,编译器抛出:
Error ... : Expected 2-3 arguments, but got 0 or more.
return Reflect.get(...arguments);
node_modules/typescript/lib/lib.es2015.reflect.d.ts:26:18
26 function get(target: object, propertyKey: PropertyKey, receiver?: any): any;
~~~~~~~~~~~~~~
An argument for 'target' was not provided.
我该怎么办?
根据 Get Off My Lawn 的建议, 这可以用
解决return Reflect.get(obj, prop, receiver)
所以在这种情况下
get: function (obj, prop, receiver) {
if (prop === "myExtendedProperty") {
return obj.myProperty.toUpperCase()+'_EXTENSION';
}
return Reflect.get(obj, prop, receiver)
},