对于我的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)
} ]