• 泛型中<>和()中的类型


    尖括号 < > 中的类型参数定义了一组可以被替换的类型占位符,而圆括号 (...) 内的类型使用则是这些类型参数的具体应用场景,展示了这些类型变量如何参与到函数的参数和返回值类型定义中去。这样设计既保证了代码的灵活性,又保持了类型安全,使得泛型函数能够在编译时进行类型检查,避免类型错误。

    在泛型函数中,<> 中的类型参数用于定义函数内部的类型,并与函数参数的类型进行关联。下面是一个代码示例来说明这个关系:

    1. function mergeArrays<T, U>(arr1: T[], arr2: U[]): (T | U)[] {
    2. return [...arr1, ...arr2];
    3. }
    4. const numbers = [1, 2, 3];
    5. const words = ["hello", "world"];
    6. const mergedArray = mergeArrays<number, string>(numbers, words);
    7. console.log(mergedArray); // 输出: [1, 2, 3, "hello", "world"]

    在这个示例中,mergeArrays 函数有两个类型参数 TU,分别表示 arr1arr2 的元素类型。然后,在调用函数时,我们通过 来具体指定了 TU 的类型。

    这样做的好处是,我们可以在调用函数时显式地指定参数的类型,而不是依赖类型推断。这对于合并不同类型的数组非常有用,因为我们可以确保传递给函数的参数类型是我们期望的类型。如果不指定类型参数,TypeScript 会尝试根据传递的参数推断出类型,但有时候推断结果可能不是我们想要的。因此,通过明确指定类型参数,我们可以更精确地定义函数的行为。

    在企业项目开发中,泛型函数因其灵活性和类型安全性而被广泛使用,以适应多种数据处理需求。以下是一些常用泛型函数的例子,这些函数在实际项目开发中能大大提高代码的复用性和维护性:

    1. 泛型查找函数

    1. function findItem<T>(array: T[], predicate: (item: T) => boolean): T | undefined {
    2. for (const item of array) {
    3. if (predicate(item)) {
    4. return item;
    5. }
    6. }
    7. return undefined;
    8. }

    这个函数可以在任意类型的数组中根据提供的谓词函数查找元素,提高了代码的通用性。

    2. 泛型映射函数

    1. function mapArray<T, U>(array: T[], mapper: (item: T) => U): U[] {
    2. return array.map(mapper);
    3. }

    此函数接收一个数组和一个转换函数,将数组中的每个元素转换为新类型后返回新数组,常用于数据预处理。

    3. 泛型类型判断函数

    1. function isInstanceOf<T>(object: any, classType: new (...args: any[]) => T): object is T {
    2. return object instanceof classType;
    3. }

    此函数用来检查一个对象是否属于某个类的实例,利用泛型确保类型安全性,常用于类型卫语句。

    4. 泛型键值对合并

    1. function mergeObjects<T extends object, U extends object>(obj1: T, obj2: U): T & U {
    2. return {...obj1, ...obj2};
    3. }

    这个函数可以合并两个对象的所有键值对,返回一个新的对象,其中包含两个输入对象的所有属性,适用于配置项合并等场景。

    5. 泛型默认值函数

    1. function withDefault<T>(value: T | null | undefined, defaultValue: T): T {
    2. return value !== null && value !== undefined ? value : defaultValue;
    3. }

    提供一个值和默认值,如果原值为空(null或undefined),则返回默认值,适用于处理可能缺失的数据。

    这些泛型函数只是冰山一角,实际上泛型在复杂类型处理、库开发、API设计等多个方面都有广泛应用,能够帮助开发者编写更加健壮、灵活且易于维护的代码。

  • 相关阅读:
    【水位预测】基于matlab径向基神经网络地下水位预测【含Matlab源码 1939期】
    测试人生 | 转行测试开发,4年4“跳”年薪涨3倍,我的目标是星辰大海(附大厂面经)!
    Go操作nutsdb
    CentOS 编译安装 nginx
    随缘记录一些MySQL问题
    基于Keras_bert模型的Bert使用与字词预测
    PCL源码分析:直通滤波
    【halcon】draw_rectangle1
    语文世界杂志语文世界杂志社语文世界编辑部2022年第9期目录
    opencv视频录制
  • 原文地址:https://blog.csdn.net/m0_47999208/article/details/139728969