typescript-类型别名

typescript-类型别名

类型别名声明

类型别名声明能够定义一个类型别名type AliasName = Type

type Point = {x: number; y: number}
type StringType = string;
type BooleanType = true | false
type Point = {x: number; y: number; z?: number}

类型别名不会创建出一种新的类型,是给已有的类型别名并直接引用该类型。

递归的类型别名

一般情况下,在类型别名声明种赋值运算符右侧的类型不允许引用当前定义的类型别名,因为类型别名对其引用的类型使用的是及早求值的策略,而不是惰性求值的策略。

type T = T// 编译错误,类型别名中t存在循环的自身引用
  1. 类型别名引用的类型为接口类型,对象类型字面量,函数类型字面量和构造函数字面量,允许递归引用类型别名
type T0 = {name: T0}
type T1 = () => T1;
type T2 = new () => T2
  1. 若类型别名引用的是数组类型或者元组类型,允许在元素类型中递归的引用类型别名
type T0 = Array<T0>
type T1 = T1{}
type T3 = [number, T3]
  1. 若类型别名引用的是泛型类或泛型接口,则允许在类型参数中递归的引用类型别名
interface A<T> {name: T
}
type T0 = A<T0>
class B<T> {name: T|undefined
}
type T1 = B<T1>

通过递归的类型别名能够定义一些特别常用的类型。

type Json = |string|number|boolean|null| {[property: string]: Json}| Json[]
const data: Json = {name: 'Typescirpt',version: {major: 3}
}

类型别名与接口

类型别名和接口类型,但是可以给类型别名通过改名字来引用表示的类型,虽然在大部分的场景中是可以互换使用的,但是类型别名和接口之间还是存在一定的差别
类型别名可以表示非对象类型,而接口只能表示对象类型,当需要表示原始类型,联合类型和交叉类型等类型的时候只能使用类型别名

type NumbericType = number | bigint

接口可以继承其他的接口,类等对象类型,而类型别名不支持继承

interface Shape {name: string
}
interface Circle extends Shape {radius: number
}

若要对类型别名实现类似继承的功能,需要使用一些变通的方法

type Shape = {name: string}
type Circle = Shape & {radius: number}
function foo(circle: Circle) {const name = circle.nameconst radius = circle.radius
}

此类型中的方法只适用于对象类型的类型别名,如果类型别名表示非对象,无法使用该方法。
只有当类型别名表示数组类型,元组类型以及类或接口的泛型示例时,才会在相关信息中提示类型别名的名字。
接口具有声明合并的行为,而类型别名不会进行声明合并

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

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

相关文章

自动驾驶算法——提取点云障碍物轮廓—DBSCAN聚类算法

前言 最近在做项目过程中,我们注意到当考虑车体轮廓去进行全局路径规划(如混合A*算法),如果仅仅将障碍物点云数据中得每一个点只当成点,会造成较大的计算时间,如若将点云聚类成圆形 线型 多边形障碍物 会提高计算效率,这是其中一个原因,另一个原因是,我们需要知道障碍…

各种空气能热泵安装图

空气能热泵安装图 循环式空气能热泵安装图 直热循环式空气能热泵安装图 泳池空气能热泵安装图 循环式水源热泵热安装系统原理图 直热循环式水源热泵安装系统图 空气水源热泵安装图

flutter as连接网易模拟器

网易模拟器下载 Mac 使用MuMu模拟器调试 Flutter开发 Android Studio 安装第三方模拟器—网易MuMu Mac 安卓Studio使用外部模拟器 Mac电脑&#xff1a;Android Studio 连接 MUMU 网易模拟器 Mac 上 Android Studio 链接网易 MuMu 模拟器调试 在 .zshrc 中设置 adb 二进制文…

重构某测试站点

一、计算校验值 校验值结果&#xff1a; 文件名称&#xff1a;培训用centos.rar&#xff0c;文件大小&#xff1a;1,335,759,953&#xff0c;MD5&#xff1a;534EC38CDA7DA2196C84AC8F6092514B&#xff0c;SHA1&#xff1a;FD35D86A27A007AE10872980C48653A110DF6067&#xf…

EverWeb 强大的零基础Mac网页设计制作软件

搜索Mac软件之家下载EverWeb 强大的零基础Mac网页设计制作软件 EverWeb 4.2是非专业网页设计师的绝佳网页制作工具&#xff0c;无需编码即可创建美观、响应迅速的网站。只需拖放自己的图像、文本和其他任何html元素到网页布局的任何位置。 EverWeb的功能特性&#xff1a; 下…

C++模板编程—学习C++类库的编程基础

课程总目录 文章目录 一、详解函数模板二、类模板三、类模板实践&#xff1a;实现向量容器vector四、理解容器空间配置器allocator的重要性 一、详解函数模板 模板的意义&#xff1a;对类型也可以进行参数化了 // 也可以用template<class T>&#xff0c;但class容易和类…

适用于 Windows 的 8 大数据恢复软件

数据恢复软件可帮助您恢复因意外删除或由于某些技术故障&#xff08;如硬盘损坏等&#xff09;而丢失的数据。这些工具可帮助您从硬盘驱动器 (HDD) 中高效地恢复丢失的数据&#xff0c;因为这些工具不支持从 SSD 恢复数据。重要的是要了解&#xff0c;您删除的数据不会被系统永…

NodeJs实现脚本:将xlxs文件输出到json文件中

文章目录 前期工作和依赖笔记功能代码输出 最近有一个功能&#xff0c;将json文件里的内容抽取到一个xlxs中&#xff0c;然后维护xlxs文件。当要更新json文件时&#xff0c;就更新xlxs的内容并把它传回json中。这个脚本主要使用NodeJS写。 以下是完成此功能时做的一些笔记。 …

【面试八股总结】内存页面置换算法

参考资料&#xff1a;小林coding、阿秀 缺页中断 在 CPU 里访问一条 Load M 指令&#xff0c;然后 CPU 会去找 M 所对应的页表项。如果该页表项的状态位是「有效的」&#xff0c;那 CPU 就可以直接去访问物理内存了&#xff0c;如果状态位是「无效的」&#xff0c;则 CPU 则会…

stanfordcorenlp+python做中文nlp任务,得到的结果中全是空字符串,而不是中文字符串

问题描述 代码&#xff1a; from stanfordcorenlp import StanfordCoreNLP import logging#中文中的应用&#xff0c;一定记得下载中文jar包&#xff0c;并标志lang‘zh’ nlp_zh StanfordCoreNLP(rD:\stanford-corenlp-full-2016-10-31, port8094, langzh,quietFalse,logg…

GiantPandaCV | 提升分类模型acc(一):BatchSizeLARS

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;提升分类模型acc(一)&#xff1a;BatchSize&LARS 在使用大的bs训练情况下&#xff0c;会对精度有一定程度的损失&#xff0c;本文探讨了训练的b…

Java Web学习笔记24——Vue项目开发流程

import是引入文件。 export是将对象导出为模块。 new Vue({ router, router: h > h(App) }).$mount(#app) App.vue: vue的组成文件以.vue结尾&#xff0c;每个组件由三个部分组成&#xff1a;<template>、<script>、<style>。 <template><d…

i.MX8MP平台开发分享(RDC软件配置篇)

Uboot中已经将RDC的配置写入到了OCRAM中&#xff0c;NXP在ATF中预设了SIP服务&#xff0c;SIP服务下有厂商自定义的smc命令ID。例如下面的DDR、GPC、SRC和HAB的smc回调函数。 在SRC中断处理函数中&#xff0c;对于SRC_M4_START指令&#xff0c;先读取OCRAM中的配置&#xff0c;…

第一个小爬虫_爬取 股票数据

前言 爬取 雪球网的股票数据 [环境使用]&#xff1a;python 3.12 解释器pycharm 编辑器 【模块使用】&#xff1a;import requests -->数据请求模块 要安装 命令 pip install requestsimport csv -->将数据保存到CSV表格中import pandas -->也可以将数据保…

Java教程更新计划

一、Java数据类型 二、Java数组 三、Java常用方法 四、Java面向对象 五、Java面向对象程序设计 六、Java核心API-基础方法类 七、Java核心API-异常 八、Java核心API-Map 九、Java核心API-集合Collection 十、泛型 十一、文件相关 十二、IO相关 十三、线程相关 十四…

幸福的人,一生被童年治愈。不幸的人,一生都在治愈童年。

刚读完《蛤蟆先生去看心理医生》&#xff0c;看介绍是一部心理学著作&#xff0c;而且推荐度偏高。读完才发现&#xff0c;是关于童年和内心成长的探索。 之前看到一句话“幸福的人&#xff0c;一生被童年治愈。不幸的人&#xff0c;一生都在治愈童年”。可见童年对一个的影响是…

vue3+vite插件开发

插件开发目的:由于我司使用的前端技术栈为vue3tsvite2.Xaxios,在前端代码框架设计初期,做了把axios挂载到proxy对象上的操作,具体可见我的另一篇文章vue3TS自动化封装全局api_ts 封装腾讯位置api-CSDN博客 现在可以实现vue2的类似this.$api.xxx去调用接口,但是vue2源码使用的是…

flutter日历范围选择器

1.传入日期跨度&#xff0c;选择上架日期时&#xff0c;自动显示下架日期 2.手动选择上架日期和下架日期(图中下架日期自动填了只需CalendarDateRangePicker在initState方法中使用_startDate widget.initialStartDate; _endDate widget.initialEndDate;&#xff0c;而不直接…

【python】OpenCV—Blob Detection(11)

学习来自OpenCV基础&#xff08;10&#xff09;使用OpenCV进行Blob检测 文章目录 1、cv2.SimpleBlobDetector_create 中文文档2、默认 parameters3、配置 parameters附录——cv2.drawKeypoints 1、cv2.SimpleBlobDetector_create 中文文档 cv2.SimpleBlobDetector_create 是 O…

端午搞个零花钱,轻松赚取创业的第一桶金!2024最受欢迎的创业项目,2024新的创业机会

好好的端午节&#xff0c; 净给我添堵&#xff01; 本来我打算在端午节愉快的玩耍&#xff0c; 结果一大早起床却看到舍友在给一堆设备充电&#xff0c; 然后装的整整齐齐&#xff0c; 满满一书包。 我好奇他小子这是要干嘛&#xff1f; 不会是打算今天回去给亲朋好友准备…