TypeScript 中的高级类型

1. 联合类型和交叉类型

联合类型(Union Types)和交叉类型(Intersection Types)是 TypeScript 中常用的两种高级类型。

  • 联合类型:使用 | 操作符将多个类型合并成一个新的类型,表示值可以是这些类型中的任意一种。
type Result = string | number;let value: Result;
value = "hello"; // OK
value = 42; // OK
value = true; // Error,布尔类型不在联合类型 string | number 中
  • 交叉类型:使用 & 操作符将多个类型合并成一个新的类型,表示值同时具有这些类型的所有成员。
interface A {x: number;
}interface B {y: number;
}type AB = A & B;let obj: AB = { x: 1, y: 2 }; // OK

2. 泛型

泛型(Generics)是一种在编写可复用代码时非常有用的工具,它允许我们在定义函数、类或接口时使用参数化类型。

function identity<T>(arg: T): T {return arg;
}let result = identity<string>("hello"); // result 的类型为 string

泛型不仅可以应用于函数,还可以用于类和接口的定义中,从而增加代码的灵活性和复用性。

3. 条件类型

条件类型(Conditional Types)是 TypeScript 2.8 引入的一种高级类型,它允许我们根据某个条件选择不同的类型。

type NonNullable<T> = T extends null | undefined ? never : T;type T1 = NonNullable<string | null>; // T1 的类型为 string
type T2 = NonNullable<number | null>; // T2 的类型为 number

条件类型可以实现一些复杂的类型操作,如从函数类型中提取参数类型、实现映射类型等。

4. 映射类型

映射类型(Mapped Types)允许我们从一个已知的类型创建一个新的类型,通过在原类型的每个属性上进行操作。

interface Person {name: string;age: number;
}type ReadonlyPerson = Readonly<Person>;let person: ReadonlyPerson = { name: "Alice", age: 30 };
person.name = "Bob"; // Error,只读属性不可修改

除了 Readonly,TypeScript 还提供了 Partial、Pick、Record 等常用的映射类型。

5. 类型推断

类型推断(Type Inference)是 TypeScript 中一种重要的特性,它可以根据上下文自动推断变量的类型。

let x = 10; // x 的类型被推断为 number

通过合理利用类型推断,可以使代码更加简洁和易读,同时不失静态类型检查的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——输入输出、基本变量类型

目录 一、输入输出 1、标准输出流&#xff08;cout&#xff09; 2、标准输入流&#xff08;cin&#xff09; 3、标准错误流&#xff08;cerr&#xff09;和标准日志流&#xff08;clog&#xff09; 4、示例代码 二、基本数据类型 1、宽字符的用法 2、如何使用 3、示例…

构建基础网站的入门指南

在数字时代&#xff0c;网站已经成为展示个人、企业或组织信息的重要平台。了解如何通过编写代码来创建一个网站是非常有用的技能。在本文中&#xff0c;我们将了解构建一个基础网站所需的步骤和代码知识。第一步&#xff1a;了解网站的基本组成 一个基本的网站通常包含HTML&a…

【GPU原理】1.线程和缓存的关系

一、GPU如何做并行计算 1.简单的串行计算 对于如上的运算AXY&#xff0c;每次运算我们需要从内存读取两个数据&#xff0c;一个是x[i]&#xff0c;一个是y[i]&#xff0c;最后存回y[i]。这里面有一个FMA的操作&#xff08;融合乘加&#xff08;FMA&#xff09;指令是RISC处理器…

【区分vue2和vue3下的element UI InputNumber 计数器组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 中&#xff0c;Element UI 提供了 el-input-number 组件作为计数器组件&#xff0c;用于处理数字输入。而在 Vue 3 中&#xff0c;Element Plus 同样提供了类似的组件&#xff0c;但可能有一些属性、事件或方法的细微差异。下面我将分别介绍 Vue 2 的 Element UI 和 V…

五月份0day/1day/nday漏洞汇总

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

ChatGPT的原理

1.ChatGPT的大致原理 ChatGPT使用了GPT-3.5模型&#xff0c;它是一个基于大型神经网络的对话生成模型。该模型是通过大规模的文本数据进行训练&#xff0c;能够生成与用户进行自然对话的响应。在对话中&#xff0c;ChatGPT会根据输入文本生成接下来的回复&#xff0c;其原理类…

Windows通过cmd运行快速启动应用

Windows如何通过cmd运行快速启动应用&#xff1f; 在Windows操作系统中&#xff0c;可以通过配置环境变量的方式将文件的路径配置到环境变量的path中&#xff0c;配置完成后可以在cmd中输入对应的应用名称即可启动应用&#xff0c;具体操作如下&#xff1a; 1. 添加应用程序路径…

C语言数据结构排序、插入排序、希尔排序等的介绍

文章目录 前言打印数组函数一、插入排序二、希尔排序总结 前言 C语言数据结构排序、插入排序、希尔排序等的介绍 打印数组函数 打印数组函数定义 // 打印数组 void PrintArray(int* a, int n) {int i 0;for (i 0; i < n; i){printf("%d ", a[i]);}printf(&qu…

Thinkphp 使用Model来增删改查

这里写目录标题 一、Model部分二、增加三、查询四、删除五、修改 一、Model部分 <?php namespace app\common\model;use think\Model; use think\Request; use think\Db; use traits\model\SoftDelete;class Visit Extends Model {// use SoftDelete;// 开启自动写入时间戳…

掘金AI 商战宝典-高阶班:如何用AI制作视频(11节视频课)

课程目录&#xff1a; 1-第一讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 2-第二讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 3-第四讲A1做视频实战&#xff1a;店铺宣传_1.mp4 4-第五讲Al做视频实战&#xff1a;商品带贷1.mp4 5-第六讲Al做视频实战&#x…

卷积神经网络——为什么卷积哪儿都能用?

两个函数的卷积 本质上就是先将一个函数翻转&#xff0c;然后进行滑动叠加。 在连续情况下&#xff0c;叠加指的是对两个函数的乘积求积分。 在离散情况下就是加权求和。 它在不同的领域有着不同的解释 在热力系统中&#xff0c;卷积通常用来计算持续添加的燃料&#xff0c…

台灯怎么选对眼睛好?六个步骤告诉你台灯怎么选!

在这个信息爆炸的时代&#xff0c;孩子们的学习压力越来越大&#xff0c;视力问题也日益凸显。尽管没有详细的地域数据&#xff0c;但整体而言&#xff0c;中国青少年的近视率已经高居世界第一位&#xff0c;且不同地区的近视率可能存在一定的差异。为了让孩子在学习的道路上走…

Vue中的计算属性和侦听器:提升响应式编程的艺术

引言 Vue.js是一个用于构建用户界面的渐进式框架&#xff0c;它的核心特性之一是响应式编程。Vue通过数据绑定和响应式系统&#xff0c;使得开发者能够以声明式的方式处理数据变化。在Vue中&#xff0c;计算属性&#xff08;Computed Properties&#xff09;和侦听器&#xff…

处理3D数据的强大工具 CloudCompare (多平台兼容)

CloudCompare 是一个开源的3D点云&#xff08;Point Cloud&#xff09;和网格&#xff08;Mesh&#xff09;处理软件&#xff0c;广泛应用于地理信息系统&#xff08;GIS&#xff09;、计算机图形学、测绘、考古、建筑和工程等领域。自2004年由Daniel Girardeau-Montaut开发以来…

0基础学习程序编程:探索未知,开启智慧之旅

0基础学习程序编程&#xff1a;探索未知&#xff0c;开启智慧之旅 在数字化时代的浪潮中&#xff0c;程序编程已成为一项不可或缺的技能。对于零基础的学习者来说&#xff0c;如何踏上这条充满挑战与机遇的编程之路&#xff1f;本文将从四个方面、五个方面、六个方面和七个方面…

Buffer Pool运行机制理解

Buffer Pool机制理解 一、为什么使用Buffer Pool&#xff1f; 众所周知&#xff0c;磁盘数据是以数据页的形式来去读取的&#xff0c;一个数据页默认大小 16K&#xff0c;也就是说你本意只想读取一行数据&#xff0c;但是它会给你加载一页的数据到buffer pool里面。这样的话就…

智能报警器——物联网应用创新

一、项目的目的、意义 我国自2020年至11月起共接报火灾23.3万起&#xff0c;亡1335人&#xff0c;伤837人&#xff0c;直接财产损失36.12亿元&#xff0c;其中&#xff0c;因电线短路、过负荷及电气设备故障等电气原因引起的火灾共40481起&#xff0c;占火灾总数的30.7%&#…

小红书图片视频下载利器,无水印!

在刷小红书时&#xff0c;总能看到一些博主发的好看的壁纸或者视频&#xff0c;想下载下来做头像或者设置为手机电脑的桌面。不过众所周知&#xff0c;直接保存的图片和视频都是有水印的&#xff0c;那如何去掉水印呢&#xff1f; 有些朋友肯定说&#xff0c;我知道有去水印的…

长城电脑压缩文件丢失了怎么办?怎么解决

在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌&#xff0c;以其稳定可靠的性能赢得了广大用户的信赖。然而&#xff0c;即便是可靠的电脑&#xff0c;也难免会遇到一些问题。其中&#xff0c;压缩文件丢失无疑是一个令人头…

Leetcode - 周赛399

目录 一&#xff0c;3162. 优质数对的总数 I 二&#xff0c;3163. 压缩字符串 III 三&#xff0c;3164. 优质数对的总数 II 四&#xff0c; 3165. 不包含相邻元素的子序列的最大和 一&#xff0c;3162. 优质数对的总数 I 假设 x 是 nums1 数组中的值&#xff0c;y 是 nums2…