如何基于输入动态指定输出对象的键

时间:2019-03-01 10:53:49

标签: typescript

我有一个react钩子,它用一个额外的键和一个设置该键的功能来丰富对象。输入看起来像这样:

fn(data: {...anything }, key: 'checked', initVal: true)

,输出将如下所示:

{
    ...originalData,
    checked: initVal,
    setChecked: (val) => // sets val
}

我不知道如何键入此函数,以便打字稿将知道返回对象上的check和getChecked属性,或者甚至是可能的。帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您几乎可以使它按您想要的方式工作。我假设名称'checked'应该是可配置的。很遗憾,您无法根据setChecked来构造名称checked。您可以使用更通用的名称(我使用set),也可以传入设置器名称。

declare function fn<T, TKey extends string, TValue>(data: T, name: TKey, initVal: TValue) : T & Record<TKey, TValue> & {
    set(value: TValue): void
}

var r = fn({ prop:1 }, 'checked', true)
r.checked
r.set(true)