一个参数具有另一个参数上存在的键

时间:2018-09-05 12:59:34

标签: typescript

我有一个函子,其定义看起来像这样:

const func = (array: {}[], object: {}) => {}

array对象的键应包括object上存在的所有键。

有办法吗?

1 个答案:

答案 0 :(得分:1)

好的,您可以这样做:

type Dictionary<V> = {[k: string]: V};
const func = <T>(array: (Record<keyof T, any> & Dictionary<any>)[], object: T) => {};

您正在使func成为generic函数,该函数将array约束为与object类型有关的类型。具体来说,它必须是Record<keyof T, any>mapped type,其密钥与T相同,但可以有任何值。我还添加了Dictionary<any>(带有index signature的类型),这样您就不会在array中的多余键上出错(假设您不希望多余的键出错)。让我们看看它是否有效:

func([{a: 1, b: true}], {a: "hey", b: "you"}); // okay
func([{a: 1}], {a: "hey", b: "you"}); // error, Property 'b' is missing in type '{ a: number; }'
func([{a: 1, b: true, c: "1"}], {a: "hey", b: "you"}); // also okay because of Dictionary

看起来不错。希望能有所帮助。祝你好运!