【问题标题】:Use typescript generic typing to set function argument type based on sibling-field in object使用打字稿泛型类型根据对象中的兄弟字段设置函数参数类型
【发布时间】:2021-11-27 14:48:35
【问题描述】:

我想创建一个名为wrapper 的打字稿函数,它使用以下参数调用。

wrapper({

  keyOne: {
    payload: {
      someField: 'foo'
    },
    caller: (payload1) => {...}
  },

  keyTwo: {
    payload: {
      someOtherField: 2
    },
    caller: (payload2) => {...}
  },

  keyThree: {...},

  keyFour: {...},
  
  ...

})

参数对象中的每个键值都是类型:

{
  payload: Record<string, string | number>,
  caller: (payloadArg) => void
}

如何使用泛型类型将每个单独的payloadArg 参数的类型设置为上面对应的payload 字段?


  • payload1-参数的类型应该是{ someField: string } 类型
  • payload2-参数的类型应该是{ someOtherField: number }

【问题讨论】:

    标签: typescript function generics


    【解决方案1】:

    这是我能做的最好的了,但是还有更多的改进空间,因为泛型类型仍然需要手动输入。

    interface Caller<T extends Record<string, string | number>> {
      payload: T,
      caller: (payloadArg: this['payload']) => void
    }
    var caller: Caller<{ someField: string }> = {
        payload: {
            someField: 'foo'
        },
        caller: (payload1) => {} // parameter is of type { someField: string }
    };
    

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2020-03-22
      • 2018-05-02
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2022-11-11
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多