当前位置: 首页 > news >正文

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

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

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

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

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

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

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

1. 泛型查找函数

function findItem<T>(array: T[], predicate: (item: T) => boolean): T | undefined {for (const item of array) {if (predicate(item)) {return item;}}return undefined;
}

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

2. 泛型映射函数

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

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

3. 泛型类型判断函数

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

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

4. 泛型键值对合并

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

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

5. 泛型默认值函数

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

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

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

相关文章:

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

尖括号 < > 中的类型参数定义了一组可以被替换的类型占位符&#xff0c;而圆括号 (...) 内的类型使用则是这些类型参数的具体应用场景&#xff0c;展示了这些类型变量如何参与到函数的参数和返回值类型定义中去。这样设计既保证了代码的灵活性&#xff0c;又保持了类型安…...

spark mllib 特征学习笔记 (一)

PySpark MLlib 特征处理详解 PySpark MLlib 提供了丰富的特征处理工具&#xff0c;帮助我们进行特征提取、转换和选择。以下是 PySpark MLlib 中常用的特征处理类及其简要介绍。 1. Binarizer Binarizer 是将连续特征二值化的转换器。 from pyspark.ml.feature import Bina…...

SQLite 日期 时间

SQLite 日期 & 时间 SQLite 是一种轻量级的数据库管理系统&#xff0c;广泛用于各种应用程序中。它支持标准的 SQL 语法&#xff0c;包括对日期和时间的处理。在 SQLite 中&#xff0c;日期和时间可以通过几种不同的方式来存储和操作。 日期和时间数据类型 SQLite 使用 …...

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…...

【APP移动端自动化测试】第一节.环境配置和adb调试工具

文章目录 前言一、Java环境搭建二、AndroidSDK环境搭建三、Android模拟器安装四、adb调试工具基本介绍 4.1 adb构成和基本原理 4.2 adb获取包名&#xff0c;界面名 4.3 adb文件传输 4.4 adb获取app启动时间 4.5 adb获取手机日志 4.6 adb其他有关…...

Kotlin 协程:从基础概念到开发实践

前言 上一篇文章 深入理解Android多线程开发:场景应用与解决方案解析 针对Android开发中的多线程应用场景和相应的解决方案做了一个梳理。 总结出了Android开发中多线程编程的几个重要点: 资源复用和优化切线程任务编排并结合示例说明了Kotlin协程在处理上述问题时的优势。 …...

IPNV6

特征——升级点&#xff1a; 1、全球单播地址 ----IPV4地址下的公有地址 V6下没 nat 2、可聚合性 (IANA组织对全球的地址进行合理分配) 3、多宿主——一个物理接口可以同时拥有多个不同网段的IPV6地址&#xff1b;但不同接口不能在同一网段 4、自动配置 1&#xff…...

C++并发之锁(std::lock_guard,std::unique_lock)

目录 1 概述2 使用实例3 接口使用3.1 lock_guard3.2 adopt_lock3.3 defer_lock3.4 try_to_lock3.5 try_lock3.6 release3.7 lock3.8 call_one1 概述 锁保护是通过使互斥对象始终处于锁定状态来管理互斥对象的对象。。   在构造时,互斥对象被调用线程锁定,在析构时,互斥被解…...

FreeRTOS队列(queue)

队列(queue)可以用于"任务到任务"、 "任务到中断"、 "中断到任务"直接传输信息。 1、队列的特性 1、1常规操作 队列的简化操如下图所示&#xff0c;从此图可知&#xff1a; 队列中可以包含若干数据&#xff1a;队列中有若干项&#xff0c;这…...

Azure数据分析Power BI

Azure数据分析Power BI 一、Power BI简介二、Power BI 如何匹配角色三、Power BI 构建基块四、使用 Power BI 服务一、Power BI简介 Microsoft Power BI 是一系列的软件服务、应用和连接器,这些软件服务、应用和连接器协同工作,将不相关的数据源转化为合乎逻辑、视觉上逼真的…...

将 Python3 程序打包成 APK 并运行在 ARM 的 Android 系统中

作为一个开发者&#xff0c;我们经常需要将我们的 Python 程序部署到移动端&#xff0c;以便更好地服务于用户。然而&#xff0c;直接在 Android 系统上运行 Python 程序却存在一定的挑战&#xff0c;因为 Android 系统默认不支持 Python。这篇文章将介绍如何将 Python3 程序打…...

学习记录:VS2019+OpenCV3.4.1实现SURF库函数的调用

最近在学习opencv的使用&#xff0c;在参照书籍《OpenCV3编程入门》实现SURF时遇到不少问题&#xff0c;下面做归纳总结。 错误 LNK2019 无法解析的外部符号 “public: static struct cv::Ptr __cdecl cv::xfeatures2d::SURF::create(double,int,int,bool,bool)” (?createSUR…...

JVM-基础知识

JVM-基础知识 什么是JVM JVM是一种跨语言的平台&#xff0c;任何语言只要能编译成.class文件都可以被JVM运行。JVM只和.class文件有关系&#xff0c;和Java语言没关系。JVM是一种虚拟机规范。 java文件是如何交给JVM执行的 JVM的常见实现 HostStop:Oracle官方另外还有IBM的J9、…...

保密工作应党而生、伴党而行、为党而兴

1.&#xff08;C &#xff09;工作应党而生、伴党而行、为党而兴&#xff0c;始终是党和国家的一项重要工作。 A. 农业 B. 国防 C. 保密 D. 文化 2.机关、单位对所产生的国家秘密事项&#xff0c;应当按照国家秘密及其密级的具体范围的规定确定密级&#xff0c;同时确定&#x…...

docker login 报错: http: server gave HTTP response to HTTPS client

环境&#xff1a; 自建 Harbor、Docker 1. 问题分析 # 命令&#xff0c;这里用的是 IP&#xff0c;可以为域名 docker login -u test 172.16.51.182:31120 # 输入密码 Password:# 报错如下&#xff1a; Error response from daemon: Get "https://172.16.51.182:31120/…...

「C系列」C 文件读写

文章目录 一、C 文件读写1. 打开文件2. 写入文件3. 读取文件4. 关闭文件5. 文件读写模式6. 错误处理 二、常见问题1. 文件打开失败2. 文件读写错误3. 文件读写位置4. 缓冲区刷新 三、相关链接 一、C 文件读写 在C语言中&#xff0c;文件读写是通过一系列的标准库函数来完成的&…...

编程中的cos:深度解析与应用探索

编程中的cos&#xff1a;深度解析与应用探索 在编程的广阔天地中&#xff0c;cos这一数学概念扮演着举足轻重的角色。它不仅是数学函数库中的基础元素&#xff0c;更是图形渲染、科学计算以及数据处理等多个领域的核心工具。本文将从四个方面、五个方面、六个方面和七个方面&a…...

计算机毕业设计hadoop+spark+hive知识图谱酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 高德地图API 酒店预测系统 大数据毕业设计

流程&#xff1a; 1.Python爬取去哪儿网全站旅游数据约10万&#xff0c;存入mysql; 2.使用pandasnumpy/hadoopmapreduce对mysql中旅游数据进行数据清洗&#xff0c;使用高德API计算地理信息&#xff0c;最终转为.csv文件上传hdfs; 3.hive建库建表导入.csv文件作为数据集&#x…...

简单谈谈云服务器私网IP的存在意义及优势

云服务器是基于虚拟化技术的计算资源&#xff0c;可以在云平台上灵活创建和管理。为了满足不同用户的需求&#xff0c;云服务提供商在云服务器上分配了两种类型的IP地址&#xff1a;公网IP和私网IP。其中&#xff0c;私网IP是指在局域网内使用的内部IP地址&#xff0c;无法通过…...

python错题(2)

、...

终极指南:5分钟免费解锁Cursor Pro全部功能的完整解决方案

终极指南&#xff1a;5分钟免费解锁Cursor Pro全部功能的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your…...

玩转OurBMC第二十六期:OpenBMC固件远程更新原理与实践(下)

栏目介绍&#xff1a;“玩转OurBMC” 是OurBMC社区开创的知识分享类栏目&#xff0c;主要聚焦于社区和BMC全栈技术相关基础知识的分享&#xff0c;全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过 “玩转OurBMC” 栏目&#xff0c;帮助开发者们深入了解到社区文…...

一文看懂推荐系统:召回05:从One-Hot到Embedding,工业界如何为海量ID类特征降维

1. 从One-Hot到Embedding&#xff1a;工业界的降维革命 第一次接触推荐系统时&#xff0c;我被一个简单的问题难住了&#xff1a;小红书有几亿用户和笔记&#xff0c;每个用户和笔记都有唯一ID&#xff0c;这些ID该怎么处理&#xff1f;直接存成数字显然不行&#xff0c;因为数…...

手把手教你:在RT-Thread上用STM32驱动0.96寸OLED显示动态二维码(附完整源码)

基于RT-Thread的STM32动态二维码显示系统开发实战 在智能门锁、工业设备配网等物联网场景中&#xff0c;二维码作为信息载体正发挥着越来越重要的作用。本文将完整呈现如何在RT-Thread操作系统上&#xff0c;通过STM32驱动0.96寸OLED实现动态二维码显示功能。不同于简单的功能演…...

多模式MRI数据融合显示帕金森病患者抑郁的结构、功能和神经化学相关

论文总结1、研究问题&#xff1a;帕金森病中抑郁症非常常见&#xff0c;但机制复杂&#xff0c;既涉及脑结构异常&#xff0c;也涉及脑功能异常&#xff0c;还可能涉及多种神经递质系统。且现有研究大多是基于单模态&#xff0c;只看结构或者只看功能&#xff0c;很少研究“结构…...

【数字孪生实战案例】怎样设置数据筛选条件,精准控制电子地图飞线的呈现效果?~山海鲸可视化

在数据可视化大屏应用里&#xff0c;电子地图飞线是展示跨地域关联数据的重要载体。当飞线数据量大、维度繁杂时&#xff0c;通过配置数据条件对地图飞线做精准筛选&#xff0c;能够过滤冗余信息、聚焦核心数据&#xff0c;让地图呈现更简洁直观&#xff0c;有效提升整体可视化…...

求职、谈合作、防踩坑:天眼查、企信宝、企查查,普通人到底该用哪个?

求职、谈合作、防踩坑&#xff1a;三大企业信息平台实战评测指南 在信息爆炸的时代&#xff0c;无论是求职面试、商务合作还是个人投资&#xff0c;提前了解企业背景已成为现代人的必备技能。天眼查、企信宝、企查查三大平台凭借海量企业数据&#xff0c;成为普通人获取商业情报…...

电子显微镜波传递函数与Ptychographic重建技术解析

1. 电子显微成像中的波传递函数解析 波传递函数&#xff08;Wave Transfer Function, WTF&#xff09;是理解电子显微镜成像机制的核心数学工具。这个复数值函数描述了电子波与样品相互作用后&#xff0c;在空间频率域中的相位和振幅变化情况。在透射电子显微镜&#xff08;TEM…...

基于Rust与智能体范式构建生产级AI工作流:从Dust平台实践到避坑指南

1. 从零到一&#xff1a;理解Dust平台的核心价值与设计哲学如果你和我一样&#xff0c;每天都在和代码、文档、数据打交道&#xff0c;那你肯定也经历过这样的时刻&#xff1a;为了一个简单的数据查询&#xff0c;需要在不同工具间反复切换&#xff1b;为了写一份周报&#xff…...

原生TypeScript待办清单:纯前端架构、观察者模式与拖拽排序实践

1. 项目概述&#xff1a;一个由AI辅助构思的现代化待办清单最近在整理个人项目时&#xff0c;我重新审视了一个之前用TypeScript写的待办清单应用。这个项目的初衷很简单&#xff1a;我需要一个极简、快速、完全由我掌控的待办工具&#xff0c;它不需要登录&#xff0c;数据就存…...