【问题标题】:Can I use Typescript generics to filter keys from an object?我可以使用 Typescript 泛型来过滤对象中的键吗?
【发布时间】:2020-02-14 20:06:35
【问题描述】:

我有一个带有工作逻辑的过滤函数,但我不知道如何编写它的类型:

export function filter<T>(object: T, ...keys: Array<keyof T>): ??? {
  let index = -1;
  const length = keys.length;
  const result = { ...object };

  while (++index < length) {
    const key = keys[index];
    if (key in object) delete result[key];
  }
  return result;
}

filter({ a: 1, b: 2 }, 'b')  // { a: 1 }

Typescript 仍然认为 'b' 属性存在,所以我正在寻找一种方法来指定将 keysT 中删除。

我熟悉 Omit(但对 Typescript 来说通常很新),我认为它可以在这方面发挥作用,但我还没有想出办法让它和 Array 相遇...

有人看到我正在寻找的路径吗?

(顺便说一句,filter 的特定签名并不重要,如果您有更利于类型安全的替代实现,我很高兴听到它)

【问题讨论】:

    标签: typescript generics types


    【解决方案1】:

    解决方案是将keyof T 提取到泛型中。这应该有效:

    export function filter<T, K extends keyof T>(object: T, ...keys: Array<K>): Omit<T, K> {
      let index = -1;
      const length = keys.length;
      const result = { ...object };
    
      while (++index < length) {
        const key = keys[index];
        if (key in object) delete result[key];
      }
      return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 2022-06-26
      • 1970-01-01
      • 2022-01-07
      • 2022-01-15
      • 2021-03-28
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多