服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - TS 5.4:Object.groupBy 和 Map.groupBy 方法添加了类型声明

TS 5.4:Object.groupBy 和 Map.groupBy 方法添加了类型声明

2024-03-04 14:44全栈修仙之路 js教程

本文我将介绍 Object.groupBy 和 Map.groupBy 这两个方法,需要注意的是,你需要把Tsconfig.json 文件中 Target 属性配置成 Esnext 才访问这些方法。

TS 5.4:Object.groupBy 和 Map.groupBy 方法添加了类型声明

2 月 22 日,TypeScript 团队发布了 TypeScript 5.4 RC 版本。即将发布的 TypeScript 5.4 为 Object.groupBy 和 Map.groupBy 方法添加了类型声明。

通过以下命令,你就可以体验最新的 TypeScript 5.4 RC 版本:

npm install -D typescript@rc

本文我将介绍 Object.groupBy 和 Map.groupBy 这两个方法,需要注意的是,你需要把 tsconfig.json 文件中 target 属性配置成 esnext 才访问这些方法。

{
  "compilerOptions": {
    "target": "esnext", 
  }
}

Object.groupBy()

Object.groupBy() 静态方法会根据提供的回调函数返回的字符串值对给定可迭代的元素进行分组。该方法的类型定义如下:

// typescript/lib/lib.esnext.object.d.ts
interface ObjectConstructor {
    /**
     * Groups members of an iterable according to the return value of the passed callback.
     * @param items An iterable.
     * @param keySelector A callback which will be invoked for each item in items.
     */
    groupBy<K extends PropertyKey, T>(
        items: Iterable<T>,
        keySelector: (item: T, index: number) => K,
    ): Partial<Record<K, T[]>>;
}

在以上代码中,K 和 T 是泛型变量,其中 K extends PropertyKey 是泛型约束,PropertyKey 是一个联合类型:

type PropertyKey = string | number | symbol;

而 Partial 和 Record 是 TypeScript 内置的工具类型。由 groupBy 的类型定义可知,参数 keySelector 是函数类型,包含 item 和 index 两个参数。

下面,我们将使用 Object.groupBy() 方法,对数组中的对象进行分组:

const inventory = [
  { name: "asparagus", type: "vegetables", quantity: 5 },
  { name: "bananas", type: "fruit", quantity: 0 },
  { name: "goat", type: "meat", quantity: 23 },
  { name: "cherries", type: "fruit", quantity: 5 },
  { name: "fish", type: "meat", quantity: 22 },
];

const groupedByType = Object.groupBy(inventory, ({ type }) => type);

TS 5.4:Object.groupBy 和 Map.groupBy 方法添加了类型声明

Map.groupBy()

Map.groupBy() 静态方法使用提供的回调函数返回的值对给定可迭代的元素进行分组。最终返回的 Map 使用测试函数中的唯一值作为键,可用于获取每个组中的元素数组。该方法的类型定义如下:

interface MapConstructor {
    /**
     * Groups members of an iterable according to the return value of the passed callback.
     * @param items An iterable.
     * @param keySelector A callback which will be invoked for each item in items.
     */
    groupBy<K, T>(
        items: Iterable<T>,
        keySelector: (item: T, index: number) => K,
    ): Map<K, T[]>;
}

在以上代码中,K 和 T 是泛型变量。调用该方法后,会返回 Map 类型的对象。与 Object.groupBy 静态方法一样,参数 keySelector 也是函数类型,包含 item 和 index 两个参数。

下面我们来看一下如何使用 Map.groupBy() 方法对数组中的对象进行分组:

const inventory = [
  { name: 'asparagus', type: 'vegetables', quantity: 6 },
  { name: 'bananas', type: 'fruit', quantity: 16 },
  { name: 'goat', type: 'meat', quantity: 20 },
  { name: 'cherries', type: 'fruit', quantity: 12 },
  { name: 'fish', type: 'meat', quantity: 8 },
];

const result = Map.groupBy(inventory, ({ quantity }) =>
  quantity < 10 ? "restock" : "sufficient",
);

const restock = result.get("restock");
const sufficient = result.get("sufficient");

TS 5.4:Object.groupBy 和 Map.groupBy 方法添加了类型声明

原文地址:https://mp.weixin.qq.com/s/TvxTduOLDrSBoIm1d5XS0A

延伸 · 阅读

精彩推荐
  • js教程如何在CocosCreator中使用http和WebSocket

    如何在CocosCreator中使用http和WebSocket

    这篇文章主要介绍了在Cocos Creator中使用的Http和WebSocket,对websocket感兴趣的同学,一定要看下...

    gamedaybyday6702022-03-03
  • js教程微信小程序实现视频播放器发送弹幕

    微信小程序实现视频播放器发送弹幕

    这篇文章主要为大家详细介绍了微信小程序实现视频播放器发送弹幕,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    小脆筒style4262022-03-09
  • js教程用Javascript实现发送短信验证码间隔功能

    用Javascript实现发送短信验证码间隔功能

    这篇文章主要介绍了用Javascript实现发送短信验证码间隔功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    爱前端的茂茂9552022-01-19
  • js教程微信小程序如何监听全局变量

    微信小程序如何监听全局变量

    这篇文章主要给大家介绍了关于微信小程序如何监听全局变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    Vegetable_dog7312022-02-25
  • js教程Javascript中的解构赋值语法详解

    Javascript中的解构赋值语法详解

    这篇文章主要给大家介绍了关于Javascript中解构赋值语法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    前端先锋5102022-02-22
  • js教程js继承的6种方式详解

    js继承的6种方式详解

    这篇文章主要给大家介绍了关于js继承的6种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    Selfimpr欧11032022-02-24
  • js教程如何让调试线上 JS 报错像调试本地源码一样优雅?

    如何让调试线上 JS 报错像调试本地源码一样优雅?

    这篇文章主要为大家介绍如何让调试线上 JS 报错像调试本地源码一样优雅,有需要的朋友可以参考下...

    神光的编程秘籍5152022-10-24
  • js教程canvas操作插件fabric.js使用方法详解

    canvas操作插件fabric.js使用方法详解

    这篇文章主要为大家详细介绍了canvas操作插件fabric.js的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    daicooper10842022-02-19