首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从typescript中的部分对象过滤泛型列表

可以使用泛型和条件类型来实现。

首先,我们可以定义一个泛型函数,该函数接受一个泛型列表和一个部分对象作为参数,并返回一个过滤后的泛型列表。函数的实现如下:

代码语言:txt
复制
function filterList<T extends object, K extends keyof T>(list: T[], partialObj: Partial<T>): T[] {
  return list.filter(item => {
    for (let key in partialObj) {
      if (partialObj[key] !== item[key]) {
        return false;
      }
    }
    return true;
  });
}

上述函数中,T 是泛型类型,表示列表中的元素类型,K 是泛型类型的键,表示部分对象的键类型。函数使用了 extends 关键字来限制泛型类型 T 必须是一个对象类型,而泛型类型 K 必须是泛型类型 T 的键类型。

函数内部使用了 filter 方法来过滤列表中的元素。对于每个元素,函数会遍历部分对象的键,并检查对应的值是否与元素的值相等。如果有任何一个键值不相等,则返回 false,表示该元素不符合过滤条件。如果所有键值都相等,则返回 true,表示该元素符合过滤条件。

以下是一个示例用法:

代码语言:txt
复制
interface Person {
  name: string;
  age: number;
  city: string;
}

const people: Person[] = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'London' },
  { name: 'Charlie', age: 35, city: 'Paris' }
];

const filteredList = filterList(people, { city: 'London' });
console.log(filteredList);

上述示例中,我们定义了一个 Person 接口表示人的属性,然后创建了一个人员列表 people。我们调用 filterList 函数来过滤出居住在伦敦的人员列表,并将结果打印到控制台。

这是一个完善且全面的答案,涵盖了泛型、条件类型、部分对象过滤、函数实现和示例用法。对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,所以不提供相关链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券