Typescript从函数输入参数推断返回对象的键名

时间:2020-05-16 21:23:17

标签: typescript

对于我的react钩子,我希望能够指定返回的对象键的名称,以便于分解。

const [users, { append }] = useList(initialUsers)
const [admins, { append }] = useList(initialAdmins)

这当然是行不通的,因为append将被定义两次。

一种解决方案是在销毁过程中重命名(一个或两个)返回的对象密钥。

但是我想这样实现:

const [users, { appendUsers }] = useList(initialUsers, "Users")
const [admins, { appendAdmins }] = useList(initialAdmins, "Admins")

为此,我创建了以下TS函数签名:

function useList<L extends any>({ initial = [], name = "" }: Options<L> = {}): [ L[], any ] {
   // ...
  return [
    items,
    {
      ["append" + name]: (newItem:L) => set([...items, newItem]),
    },
  ]
}

这有效,但是未对返回的对象键进行类型检查。

我想定义对象中每个返回键的签名及其值的签名。 至少应该定义返回键的数量。

如果没有动态部分,则可以通过函数参数将返回签名更改为:

[ L[], {
  append: ((T) => void)
} ]

但是我需要类似的东西:

[ L[], {
  ["append" +  name]: ((T) => void)
} ]

0 个答案:

没有答案