我有一个函子,其定义看起来像这样:
const func = (array: {}[], object: {}) => {}
array
对象的键应包括object
上存在的所有键。
有办法吗?
答案 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
看起来不错。希望能有所帮助。祝你好运!