typescript 嵌套对象的Javascript代理(适用于所有函数调用)

dtcbnfnu  于 2022-11-26  发布在  TypeScript
关注(0)|答案(1)|浏览(149)

我正在寻找一种方法来在嵌套对象上使用代理。在这个例子中,我想在我的代理中为该对象中的每个函数调用的结果添加1。我该如何做呢,因为我不能直接在testobj上使用apply。感谢您的任何输入。

const testObj = {
  add: (a: number, b: number) => a + b,
  subtract: (a: number, b: number) => a - b,
  multiply: (a: number, b: number) => a * b,
  ...
}

const proxy = new Proxy(testObj, {
  // for the result of every function call (add / subtract ....)
  // i would like to add 1 to the result

})
k7fdbhmy

k7fdbhmy1#

最后我找到了解决的方法。那就是从get陷阱返回另一个代理。只是发布这个以防有人偶然发现同样的问题。

const testProxy = new Proxy(testObj, {
  get: (
    target: typeof testObj,
    key: keyof typeof testObj,
  ): any => {
    if (typeof target[key] !== 'function') {
      return target[key]
    } else {
      return new Proxy(target[key], {
        apply: (
          target: any,
          thisArg: any,
          argArray?: any[],
        ): any => {
          console.log('triggered')
          return target(...argArray) + 1
        },
      })
    }
  },
})

相关问题