TypeScript中extends的用法
介绍
extends 关键字在 TypeScript 中有多种应用,包括泛型约束、继承类、接口继承和条件类型。通过灵活使用 extends,TypeScript 提供了丰富的工具来增强类型安全性,使代码更具表现力和可维护性。
1. 约束接口的继承
extends 关键字也可用于接口。通过接口继承,我们可以创建一个继承另一个接口的新接口,并添加额外的属性或方法。
interface Person {name: string;age: number;
}interface Employee extends Person {employeeId: number;
}const employee: Employee = {name: "John",age: 30,employeeId: 12345
};
2. 约束类的继承
在 TypeScript 中,extends 关键字也用于类的继承。子类可以继承父类的属性和方法,并在需要时进行重写。
class Animal {name: string;constructor(name: string) {this.name = name;}
}class Dog extends Animal {breed: string;constructor(name: string, breed: string) {super(name);this.breed = breed;}
}const myDog = new Dog("Fido", "Golden Retriever");
console.log(myDog.name); // 访问父类属性
console.log(myDog.breed); // 访问子类属性
3. 约束泛型类型参数
在 TypeScript 中,泛型(generics)使我们能够编写可重用的函数、类和组件,同时保持类型的安全性。extends 关键字在泛型中常常用于约束泛型类型参数,以确保传入的类型符合某些要求。
function lengthOfArray<T>(arr: T[]): number {return arr.length;
}const numbers = [1, 2, 3];
const result = lengthOfArray(numbers);
在上面的示例中,T 是泛型类型参数,它可以是任何类型。但有时我们希望泛型参数必须是某种类型的子类型。这时可以使用 extends 关键字来添加约束:
function firstElement<T extends Array<any>>(arr: T): T[0] {return arr[0];
}const numbers = [1, 2, 3];
const firstNum = firstElement(numbers); // firstNum 的类型是 number
<T extends Array> 表示 T 必须是 Array 或其子类型。这确保了传入的参数 arr 是一个数组,从而允许我们安全地访问其第一个元素。
4.条件类型
在 TypeScript 2.8+ 中,extends 关键字还被用于条件类型。条件类型使我们能够基于类型参数的属性来确定最终的类型。
type NonNullable<T> = T extends null | undefined ? never : T;const x: string | null = "hello";
const y: string = x; // 编译通过const a: string | null = null;
const b: string = a; // 报错
在上述示例中,NonNullable 是一个条件类型,它检查泛型类型 T 是否是 null 或 undefined,如果是,则返回 never 类型,否则返回 T 类型。这允许我们确保某个值不会为 null 或 undefined。
相关文章:
TypeScript中extends的用法
介绍 extends 关键字在 TypeScript 中有多种应用,包括泛型约束、继承类、接口继承和条件类型。通过灵活使用 extends,TypeScript 提供了丰富的工具来增强类型安全性,使代码更具表现力和可维护性。 1. 约束接口的继承 extends 关键字也可用于…...

手把手创建属于自己的ASP.NET Croe Web API项目
第一步:创建项目的时候选择ASP.NET Croe Web API 点击下一步,然后配置: 下一步:...

【Javascript】数组的基本操作
目录 声明 字面量形式 构造函数声明 访问数组中的元素 数组的长度 增删改查 增 通过索引添加数据 在数组后面添加数据 在数组前添加数据 删 删除数组中最后一个元素 删除数组中第一个元素 改 查 数组是⼀种列表对象,它的原型中提供了遍历和修改元素的…...

Jupyter Notebook 设置黑色背景主题
Jupyter Notebook 设置黑色背景主题 # 包安装 pip install jupyterthemes -i https://mirrors.aliyun.com/pypi/simple pip install --upgrade jupyterthemes # 查看可用主题 jt -l # monokai暗背景,-f(字体) -fs(字体大小) -cellw(占屏比或宽度) -ofs(输出段的字…...

1 Go的前世今生
概述 Go语言正式发布于2009年11月,由Google主导开发。它是一种针对多处理器系统应用程序的编程语言,被设计成一种系统级语言,具有非常强大和有用的特性。Go语言的程序速度可以与C、C相媲美,同时更加安全,支持并行进程。…...
面试-Redis-缓存击穿
问:什么是缓存击穿 ? 怎么解决 ? 答:缓存击穿的意思是对于设置时间过期的key,当key过期时,恰好有大量对这个key的请求发送过来,此时这些请求发现这个key过期,就会打到数据库加载数据并设置缓存ÿ…...
80个国内可用的Chatgpt网页版(2023.10.21更新)
ChatGPT:革命性的人工智能语言模型 ChatGPT,一款能够与人类进行自然流畅对话的人工智能语言模型,通过大量训练数据和先进算法,展现出卓越的自然语言处理能力。它能理解并回应人类问题,提供准确、连贯且有意义的答案&a…...

Android 10.0 Launcher3定制化之动态时钟图标功能实现
1.概述 在10.0的系统产品rom定制化开发中,在Launcher3中的定制化的一些功能中,对于一些产品要求需要实现动态时钟图标功能,这就需要先绘制时分秒时针表盘,然后 每秒刷新一次时钟图标,时钟需要做到实时更新,做到动态时钟的效果,接下来就来分析这个功能的实现 如图: 2.动…...

HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法
1、为什么网站要使用安全证书 我们所处的网络环境是复杂多样的,大致分为两类,一类是可信的网络服务商,比如直接连的电信运营商的网络,网线,4G,5G;另一类是不可信的网络,比如WIFI&am…...
python之Scrapy爬虫案例:豆瓣
运行命令创建项目:scrapy startproject scrapySpider进入项目目录:cd .\scrapySpider\运行命令创建爬虫:scrapy genspider douban movie.douban.com目录结构说明|-- scrapySpider 项目目录 | |-- scrapySpider 项目目录 | | |-- spider…...

2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主
2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主 修改增加了广告位,根据文档直接替换,原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码,然后关闭广告展示提交,通过后打开即可 无广告引流 流量主版…...

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (二)
AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…...
Qt扫盲-Qt Concurrent概述
Qt Concurrent概述 一、概述二、Concurrent Map 和 Map- reduce1. 并发 Map2. 并发 Map-Reduce3. 其他API特性1. 使用迭代器而不是Sequence3. 阻塞变量4. 使用成员函数5. 使用函数对象6. 包装接受多个参数的函数 三、Concurrent Filter and Filter-Reduce1. 并发过滤器2. 并发F…...

c语言用json解析库(jansson)检测字符串是否是json格式的数据
C语言检测字符串是否是json格式的数据,可以用jansson库检测,也可以用cjson库来校验。但是若数据格式有问题,jansson可以指出哪里有错误,cjson无法指出。 下面就演示C语言如何使用jansson库检测字符串是否是json格式的数据。 1.下载…...
我再记录一个bug
项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 提示:这里描述项目中遇到的问题࿱…...

AJAX: 对话框大全
AJAX:$.ajax({url: "/admin/cutting/getDataWeek",type: "GET",data:{},dataType:json,success: function (res) {if (res.code 1) {}},error:function (error) {console.log(请求失败);console.log(error);}}); $(.sub).unbind(click).click(funct…...

LeetCode讲解篇之40. 组合总和 II
文章目录 题目描述题解思路题解代码 题目描述 题解思路 按升序排序candidates,然后遍历candidates,目标数减去当前candidates的数,若该结果小于0,因为candidates的元素大于0,所以后续不会再出现让计算结果等于0的情况…...

RK3568平台 GPIO子系统框架
一.gpio 子系统简介 gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。gpio 子系统的主要目的就是方便驱动开发者使用 gpio,驱动 开发者在设备树中添加 gpio 相关信…...

buu第五页 wp
[RootersCTF2019]babyWeb 预期解 一眼就是sql注入,发现过滤了 UNION SLEEP " OR - BENCHMARK盲注没法用了,因为union被过滤,堆叠注入也不考虑,发现报错有回显,尝试报错注入。 尝试: 1||(updatex…...

【论文阅读】以及部署BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework
BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework BEVFusion:一个简单而强大的LiDAR-相机融合框架 NeurIPS 2022 多模态传感器融合意味着信息互补、稳定,是自动驾驶感知的重要一环,本文注重工业落地,实际应用 融…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...