代码之家  ›  专栏  ›  技术社区  ›  Eduard

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

  •  0
  • Eduard  · 技术社区  · 7 年前

    我有一个函数,它的定义如下:

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

    对象的键 array 应该包括上存在的所有密钥 object

    有办法吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jcalz    7 年前

    当然,你可以这样做:

    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 )这样你就不会在 (假设您不希望额外键出现错误)。让我们看看它是否有效:

    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
    

    推荐文章