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

TypeScript 学习之类型推导

在一些情况下,代码上没有显性明确类型,typescript 可以隐形推断出类型。

基础

let x = 3;

变量x的类型被推断为数字。
类型推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时

最佳通用类型

let x = [0, 1, null]; // 类型为 number[]
let y = [0, 1, null, '1']; // 类型为 (number|string)[]

typescript 会考虑所有元素的类型,并设置为候选类型,然后计算出兼容所有候选类型的类型。

class Animal {}class Rhino extends Animal {}
class Elephant extends Animal {}
class Snake extends Animal {}let zoo = [new Rhino(), new Elephant(), new Snake()]; // 类型 (Rhino|Elephant|Snake)[]

想让zoo推断为Animal[]类型,但是数组中没有Animal类型的元素,所以不能推断出zooAnimal[]的结果。
当候选类型不能使用时,需要明确的指出类型。

let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

没有找到最佳通用类型,类型推断的结果为联合数组类型。(Rhino | Elephant | Snake)[]

上下文类型

上下文归类使用情况:函数的参数,赋值表达式的右边,类型断言,对象成员、数组字面量和返回值语句。

window.onmousedown = function (mouseEvent) {console.log(mouseEvent.button);
};

typescript 类型检查器使用 window.onmousedown函数的类型来推断右边函数表达式的类型。所以能推断出mouseEvent参数的类型。

如果上下文类型表达式包含了明确的类型信息,上下文的类型会被忽略。

上下文类型也会作为最佳通用类型的候选类型。

class Animal {}class Rhino extends Animal {}
class Elephant extends Animal {}
class Snake extends Animal {}function createZoo(): Animal[] {return [new Rhino(), new Element(), new Snake()];
}

这里通用类型有 4 个候选者:Animal,Rhino, ElephantSnakeAnimal 为最佳通用类型。

相关文章:

TypeScript 学习之类型推导

在一些情况下,代码上没有显性明确类型,typescript 可以隐形推断出类型。 基础 let x 3;变量x的类型被推断为数字。 类型推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时 最佳通用类型 let x [0, 1, null]; // 类型为 numb…...

Android四大组件——Service详解

Service 为后台运行,不可见,没有界面。优先级高于Activity(内存不足时先杀掉Activity),运行在主线程且不能做耗时操作。 一、Service 启动方式 1、startService() 通过 startService 启动后,service会一直…...

svg转png

svg转png写了一个spring boot项目,支持传入svg文件转出png图片,并且自定义转出png的宽和高。主要代码如下:所需依赖如下:演示如下:首先,运行项目使用接口调用工具调用接口发送请求,提取文件1000…...

教你如何搭建人事OA-员工管理系统,demo可分享

1、简介1.1、案例简介本文将介绍,如何搭建人事OA-员工管理。1.2、应用场景人事OA-员工管理应用对员工信息进行管理,可办理入职、转正、离职等流程。2、设置方法2.1、表单搭建1)新建表单【员工管理】,字段设置如下:名称…...

C++递推基础知识

文章目录一、递推的概念二、递推和递归的区别三、递推的实例1、最基础的:斐波那契数列2、变形版斐波那契数列3、较复杂的递推式求解:昆虫繁殖4、经典逆推问题:题目数量一、递推的概念 1、什么是递推算法? 递推算法:是…...

【Python入门第十天】Python 布尔

布尔表示两值之一:True 或 False。 布尔值 在编程中,通常需要知道表达式是 True 还是 False。 可以计算 Python 中的任何表达式,并获得两个答案之一,即 True 或 False。 比较两个值时,将对表达式求值,P…...

WebDAV之π-Disk派盘+Piktures

Piktures支持WebDAV方式连接π-Disk派盘。推荐一款简单易用,功能超级强大的智能相册应用。Piktures智能相册是一款简单易用,功能超级强大的智能相册应用,它不仅可以访问本地和云照片,还可以照片编辑器,而且它同时还是一…...

Revit问题:Navisworks中导入的rvt模型角度不正确调整

一、Navisworks中导入的rvt模型角度不正确调整方法 通常情况下,我们做好一个Revit模型,有时候出于成果保护或者鉴于Revit自带的碰撞检测效果不够直观、Revit模型体量太大,需要一个轻量化的模型展示,我们通常情况下会使用Autodesk公…...

最全正则验证

一、校验数字的表达式 1. 数字:^[0-9]*$ 2. n位的数字:^\d{n}$ 3. 至少n位的数字:^\d{n,}$ 4. m-n位的数字:^\d{m,n}$ 5. 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6. 非零开头的最多带两位小数的数字:…...

阿里云服务器入门使用流程 新手学习教程

一、阿里云根据个人需要选合适的云服务器,选好cpu、内存、带宽,地域,这四个是主要的。其他可以默认选择。 二、登陆控制台 输入账号密码,进去看到服务界面,新手可能不容易看懂。点击左侧菜单,点击云服务器…...

git学习

一.实际场景 数据备份代码还原协同开发追溯问题代码的编写人和编写时间 二.Git工作流程图 三.获取本地仓库 四.git add和git commit git status:查看修改的状态(暂存区,工作区) git add . :通配符,添加当…...

新建一个完整的react项目和完善初始项目

一:新建一个完整的react项目 1.环境准备 目前我的环境是 node:16.17.1 npm: 8.15.0 查看环境:1):打开命令提示符工具,利用node -v和npm -v 查看一下自己的环境,如果觉得重新卸载、安装node比较…...

HIVE 安装

目录 启动hadoop 把hive压缩包拷贝到虚拟机里面 解压 改名 配置环境变量 新建一个hive-site.xml文件,并编辑 配置文件 添加jar包 初始化mysql 启动hive 创建数据库 使用数据库 创建表 添加数据 查看数据 删除表 安装虚拟机 安装JDK 安装Hadoop …...

jsp游泳馆门票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp游泳馆门票管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,…...

C++ ---智能指针详解

文章目录前言一、 为什么需要智能指针?二、内存泄漏2.1 什么是内存泄露?危害是什么?2.2 内存泄露的分类2.3 如何避免内存泄露三、智能指针的使用及原理3.1 RAII3.2 智能指针的原理3.3 std::autoptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的循环引…...

企业带宽控制管理

在企业中保持稳定的网络性能可能具有挑战性,因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应用和新技术的引入,网络的带宽容量也在增加。 停机和带宽过度使用是任何组织都无法避免的两个问题,为了解决…...

MybatisPlus实现分页效果并解决错误:cant found IPage for args!

前言 早就知道MybatisPlus对分页进行了处理,但是一直没有实战用过,用的是自己封装的一个分页组件,虽不说麻烦吧,但是也不是特别简单。 写起来还是比较复杂,但是最近这个组件有了点小小的bug,我决定是时候…...

C语言赋值(关系)运算符和逗号运算符

一.赋值&#xff08;关系&#xff09;运算符 1.关系运算符 高优先级组 < 左边值小于右边值,则返回1。否则返回0 < 左边值小于等于右边值,则返回1。否则返回0 > 左边值大于右边值,则返回1。否则返回0 > 左边值大于等于右边值,则返回1。否则返回0 低优先级组…...

几种在Linux/window下查询外网IP的办法。

hello world curl ifconfig.me/ip如下图 1. 纯文本 https://ifconfig.me/ip https://ipinfo.io/ip 或 https://ipecho.net/ip 或 https://ipecho.net/plain https://www.trackip.net/ip https://icanhazip.com 2. JSON格式 https://ifconfig.me/all.json https://ipi…...

【nodejs-05】黑马nodejs学习笔记05-数据库基本操作01

文章目录3.MySQL的基本使用3.1 使用 MySQL Workbench 管理数据库3.2 使用 SQL 管理数据库3.3 SQL 的 SELECT 语句3.4 SQL 的 INSERT INTO 语句3.5 SQL 的 UPDATE 语句3.6 SQL 的 DELETE 语句3.7 SQL 的 WHERE 子句3.8 SQL 的 AND 和 OR 运算符3.9 SQL 的 ORDER BY 子句3.10 SQL…...

零基础、学历无优势、逻辑能力一般”,能转行做程序员吗?

此前&#xff0c;拉勾数据研究院对程序员群体做了一次深入调查&#xff0c;并发布了《2022程序员群体职场洞察报告》&#xff0c;报告显示&#xff0c;“高薪”依然是程序员的职业标签之一。 在调查的程序员群体中&#xff0c;年薪在10-30万元之间的人数占比为66.7%&#xff0…...

第五章.与学习相关技巧—Batch Normalization

第五章.与学习相关技巧 5.3 Batch Normalization Batch Norm以进行学习时的mini_batch为单位&#xff0c;按mini_batch进行正则化&#xff0c;具体而言&#xff0c;就是进行使数据分布的均值为0&#xff0c;方差为1的正则化。Batch Norm是调整各层激活值的分布使其拥有适当的广…...

Zynq非Video Mixer方案实现视频叠加输出,无需SDK配置,提供工程源码和技术支持

目录1、前言2、Video Mixer的不便之处3、FDMA取代Video Mixer实现视频叠加输出4、Vivado工程详解5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 关于Zynq使用Video Mixer方案实现视频叠加输出方案请参考点击查看&#xff1a;Video Mixer方案 对于Zynq和Micr…...

从零实现Web服务器(二): 线程池以及线程池的作用,Get和Post的区别,项目中如何编写数据库连接池,定时器优化非活跃连接

文章目录一、线程池以及线程池的作用二、手写线程池三、Get和Post的区别四、如何编写数据库连接池五、定时器优化非活跃连接5.1. 基于排序链表实现。5.2. 基于小根堆实现。5.3. 基于红黑树实现。5.4. 基于时间轮实现。5.4.1 单时间轮实现5.4.2 多时间轮实现一、线程池以及线程池…...

为什么伟大的产品只专注做一件事

uber 不允许你预订出租车。亚马逊一开始只是卖书。谷歌只是一个搜索引擎。麦当劳没有餐具。不知为什么&#xff0c;我们仍然相信一个产品要想成功&#xff0c;它必须做很多事情。这通常发生在两种情况下&#xff1a;当新产品试图让市场相信它们是值得的&#xff0c;或者当公司提…...

pycharm远程连接服务器,并单步调试服务器上的代码

每天都有不同的朋友来Push我 那如果比较健忘的话&#xff0c;为啥不问一下chatGPT呢 问题的缘由在我想在本地单步调试代码。。。 我的代码完全在云端服务器的&#xff0c;还有数据集都是&#xff0c;但实际上本地代码可以通过pycharm给他传上去。 但是在后面配置的时候需要两…...

JVM05 方法区

Person&#xff1a;存放在元空间&#xff0c;也可以说方法区 person&#xff1a;存放在Java栈的局部变量表中 new Person()&#xff1a;存放在Java堆中 1.方法区的理解 方法区主要存放的是 Class&#xff0c;而堆中主要存放的是 实例化的对象 方法区&#xff08;Method Area…...

盘点3个.Net开发的WMS仓库管理系统

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 仓库管理系统在企业中&#xff0c;重要性越来越高&#xff0c;不仅可以提高效率&#xff0c;还能降低企业的压力&#xff0c;企业通过协调和优化资源使用和物料流动&#xff0c;能极大程度地提升了管理效率&…...

Linux下Java项目开机自动启动

Linux下Java项目开机自动启动1、在Linux上设置开机启动Java程序&#xff0c;例如&#xff1a;test.jar在Linux上启动Java程序的命令:2、可以将程序启动的指令做成一个shell脚本&#xff0c;简单的做法创建一个test.sh文件&#xff0c;内容如下&#xff1a;3、最重要的一步就是修…...

基于SpringBoot的智慧社区网站

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…...

做一钓鱼网站吗/谷歌浏览器下载手机版最新版

GBase 8c Platform提供集群管理功能&#xff0c;可便捷高效地实现数据库集群的部署、外部导入、启停、同步设置、备份、恢复、扩缩容等操作。用户可以创建新集群、导入外部集群&#xff0c;还具有丰富的集群管理功能。 界面默认显示已部署的数据库集群配置信息。通用管理平台对…...

设计公司名字创意/上海优化seo

区块链技术被誉为第四次工业革命代表性成果之一&#xff0c;“最有潜力触发第五轮颠覆性革命浪潮的核心技术”&#xff0c;代表着互联网的未来&#xff0c;具有划时代意义。它被认为是与1975年的个人计算机、1993年的因特网同样具有革命性的信息技术突破。 日前&#xff0c;全…...

模板和网站是一体的吗/seo网络科技有限公司

在 PHP 中&#xff0c;可以使用 fopen () 函数打开一个远程文件&#xff0c;并使用流来下载文件内容到本地文件。这样优点是不用将文件全部一次性放入内存中&#xff0c;可以避免内存溢出的问题。 下面是一个示例代码&#xff1a; $url http://example.com/file.zip; $local…...

滨江区建设局网站/自动搜索关键词软件

1. 连接ftp服务器 格式&#xff1a;ftp [hostname  ip-address] a)在linux命令行下输入&#xff1a;ftp 10.18.34.115 b)服务器询问你用户名和口令&#xff0c;分别输入yint和相应密码&#xff0c;待认证通过即可。 2. 下载文件 下载文件通常用get和mget这两条命令。 a) get 格…...

网站开发java好还是php好/清远新闻最新

正常情况下&#xff0c;当登陆用户异常掉线并不会通知服务器&#xff0c;这时服务器一直以为用户在线&#xff0c;解决这种问题有以下两种方法&#xff1a; 一、轮训检测连接情况&#xff0c;需要Timer轮训检测&#xff0c;如下代码&#xff1a;procedure TMainForm.Timer1Time…...

深圳网站建设网络/2023最火的十大新闻

我正在想办法&#xff0c;如果不需要的话&#xff0c;我该如何隐藏overflow-y:scroll;。我的意思是&#xff0c;我正在建立一个网站&#xff0c;我有一个主要的区域&#xff0c;文章将显示&#xff0c;我想隐藏滚动条&#xff0c;如果内容不超过当前的宽度。还有&#xff0c;我…...