首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类型记录和代理修改函数对象中的参数

使用类型记录和代理修改函数对象中的参数
EN

Stack Overflow用户
提问于 2022-10-20 23:12:25
回答 1查看 21关注 0票数 0

我试图修改由第三部分生成的对象,以获得更好的开发体验,因为生成对象中的一些参数不再需要/可以在默认情况下设置它使用的位置。尽管我仍然希望在调用钩子时将IntelliSense保存在类型记录中,以给出该对象中可用方法的建议。

代码语言:javascript
复制
type ObjectFunction<Type> = Type extends (_: { prop: infer MessageType }, __: infer CallbackType) => infer Return
  ? (prop?: MessageType, callback?: CallbackType) => Return
  // trying to simplify the argument above
  : never;

type NewObjectType<Type> = {
  [Property in keyof Type as ObjectFunction<Type[Property]> extends never ? never : Property]: ObjectFunction<
    Type[Property]
  >;
};

下面是我试图用我的钩子来代理它

代码语言:javascript
复制
return new Proxy<NewObjectType<typeof originalObj>>(
    { ...originalObj },
    // typescript will error above as the shape is different thru the NewObjectType and the orignalObj
    {
      get(target, method) {
        if (typeof method === "string" && target.hasOwnProperty(method)) {
          return target[method as keyof NewObjectType<typeof originalObj>];
        }
      },
    },
  );

下面是我想要实现的一个例子

代码语言:javascript
复制
originalObj = {
  method1: (arg: {prop: string}, callback?: ()=> void) => void
  method2: (arg: {prop: string}, callback?: ()=> void) => void
  ...
}

进入下面

代码语言:javascript
复制
newObj = {
  method1: (prop?: string, callback?: ()=> void) => void
  method2: (prop?: string, callback?: ()=> void) => void
  ...
}
EN

回答 1

Stack Overflow用户

发布于 2022-10-21 00:29:57

这里没有代理的理由。您的代理似乎不起作用,它返回原始方法,而不是直接接受prop字符串的方法。

我建议你写个简单的

代码语言:javascript
复制
const newObj = {} as NewObjectType<typeof originalObj>;
for (const name in originalObj) {
  newObj[name] = (prop, callback) => originalObj[name]({prop}, callback);
}
return newObj;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74147206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档