typescript类型基础

news2024/11/15 15:38:49

typescript类型基础

枚举类型

enum Season {
    Spring,
    Summer,
    Fall,
    Winter
}

数值型枚举

enum Direction {
    Up,
    Down,
    Left,
    Right
}
const direction:Direction = Direction.up

每个数值型枚举成员都表示一个具体的数字,如果在定义一个枚举的时候没有设置枚举成员的值,Typescript会自动计算每个枚举成员的值。第一个枚举成员的值为0,后续++

enum Direction {
    Up = 1, // 1
    Down, // 2
    Left = 10, // 10
    Right // 11
}

数值型枚举是number类型的子类型,允许将数值型枚举赋值给number类型。

const direction: number = Direction.up

Number类型也能够赋值给枚举类型,即使number类型的值不在枚举成员值的列表中也不会产生错误

enum Direction {
    Up,
    Down,
    Left,
    Right
}
const d1: Direction = 0
const d2: Direction = 10 // 不会产生错误

字符串枚举

字符串枚举成员必须使用字符串字面量或者另一个字符串枚举成隐患来初始化。

enum Direction {
    Up = 'UP',
    Down = 'DOWN',
    Left = 'LEFT',
    Right = 'RIGHT'
    U = Up,
    D = Down
    L = Left
    R = Right
}

字符串枚举是string类型的子类型,因此允许将字符串枚举类型赋值给string类型。下例中常量direction为string类型

enum Direction {
    Up = 'UP',
    Down = 'DOWN',
    Left = 'LEFT',
    Right = 'RIGHT'
}
const direction: string = Direction.Up

不允许将string类型赋值给字符串枚举类型

enum Direction {
    Up = 'UP',
    Down = 'DOWN',
    Left = 'LEFT',
    Right = 'RIGHT'
}
const direction: Direction = 'UP' // 编译错误,不能将类型up赋值给direction

异构型枚举

异构型枚举: TypeScript允许在一个枚举中同时定义数值类型枚举成员和字符串枚举成员。

enum Color {
    Black = 0,
    White = 'White'
}

不允许使用计算的值作为枚举成员的初始值

enum Color {
    Black = 0 + 0 // 不允许使用计算的值作为枚举成员的初始值
}

在异构型枚举中,必须为在字符串枚举成员之后的数值型枚举成员指定一个初始值。

enum ColorA {
    Black,
    White = 'white'
}
enum ColorB {
    White = 'white'
    Black // 枚举成员必须有一个初始值
}

枚举成员映射

任何类型的枚举,都可以通过枚举成员名来访问枚举成员。

enum Bool {
    False = 0,
    True = 1
}
Bool.False ;
Bool.True
Bool[Bool.False] // 'False'
Bool[Bool.True] // 'True'

常量枚举成员和计算枚举成员

常量枚举成员

若枚举类型的第一个枚举成员没有定义初始值。枚举成员是常量枚举成员并且初始值为0
若枚举成员没有定义初始值并且和他相邻的成员是常量枚举成员并且初始值为紧邻的前一个枚举成员值加一,如果紧邻的前一个枚举成员的值不是数值型常量,就会产生错误

enum Foo {
    A,
    B
}
enum Bar {
    c = 'c',
    d // 编译错误
}
  1. 常量枚举表达式可以是数字字面量,字符串字面量和不包含替换值的模板字面量
  2. 常量枚举表达式可以是对前面定义的常量枚举成员的引用
  3. 常量枚举表达式可以是分组运算符包围起来的常量枚举表达式
  4. 常量枚举表达式中可以使用一元运算符,操作数必须为常量枚举表达式
  5. 常量枚举表达式可以使用二元运算符,两个操作数必须是常量枚举表达式
enum Foo {
    A = 0,
    B = `B`, // 无替换的模板字面量
    C = 'C'  // 字符串字面量
    D = A // 引用前面定义的常量枚举成员
}
enum Bar {
    A = -1 // 一元运算符
    B = 1 + 2// 二元运算符
    C = (4 / 2) * 3 // 分组运算符
}
字面量枚举成员[常量枚举成员的子集]
  1. 枚举成员没有定义初始值
  2. 枚举成员的初始值为数字字面量、字符串字面量和不包含替换值
    的模板字面量
  3. 枚举成员的初始值为对其他字面量枚举成员的引用。
    在这里插入图片描述

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

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

相关文章

InfiniGate自研网关实现三

9.网关注册中心服务初始创建 整理整个网关调用链路流程,梳理核心服务。并完成网关中心简单DDD模型结构工程的搭建,与库表连通可以查询接口映射数据。 在前面我已经开发出了一个初具模型的核心通信组件,那么我该如何使用这个组件呢&#xff…

私域流量引流方式有哪些?

私域流量引流的方法无非是营销渠道投放、各平台KOL投放、自有自媒体平台账号内容引流、线下引流、老客户转介绍裂变等几个方面,下面对各种不同方法进行简单介绍。 1、营销渠道投放:选择广点通、粉丝通、某些app的信息流和dou等大平台自带的推广渠道工具…

【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』

文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…

揭秘“循环购”模式:为何商家如此慷慨,消费者又能获利?

亲爱的朋友们,我是吴军。今天,我将为大家揭开一种备受瞩目的商业模式——“循环购”的神秘面纱。你是否也好奇,为何商家愿意在你消费后给予丰厚的回馈,甚至让你在消费过程中还能赚取收益?这种模式的背后到底隐藏着什么…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时,使用XSSFWorkbook进行写入时会发现,只有将100w条数据全部加载到内存后才会用write()方法统一写入,效率很低,所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

IMU在羽球发球力中的应用

在羽毛球运动中,发球不仅是比赛得分的关键,其技术细节更是影响比赛走向的重要因素。近期,来自斯洛伐克和波兰的科研团队利用先进的IMU传感器技术,对顶尖选手的发球技巧进行了深度分析,旨在揭示不同发球方向对上身动作的…

通过线程池开启异步任务 @Async

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用户体…

《第一行代码》第二版学习笔记(7)——使用通知和摄像头

文章目录 一、使用通知二、调用摄像头 介绍了通知基于8.0的使用方法和如何调用摄像头拍照 一、使用通知 public void onClick(View v) {if (v.getId() R.id.send_notice){Intent intent new Intent(this,NotificationActivity.class);PendingIntent pi PendingIntent.getAct…

如何快速找出文件夹里的全部带有英文纯英文的文件

参考此文章:如何快速找出文件夹里的全部带有中文&纯中文的文件 只需要根据自己的需求,把下面相关的设置调整好即可

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一,主要的功能是将客户端输入的 SQL 语句分解为语法单元,然后将这些语法单元转化成数据库内部可识别的数据结构,最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

事件知识图谱 - EventKGE_Event knowledge graph embedding with event causal transfer

EventKGE: Event knowledge graph embedding with event causal transfer 作者:Daiyi Li(南航) 来源:2023 Knowledge-Based Systems(中科院一区,影响因子8.8) 论文:[ScienceDirec…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月6日,星期一

每天一分钟,知晓天下事! 2024年5月6日 星期一 农历三月廿八 1、 五一假期全社会跨区域人员流动量预计约13.6亿人次,日均超2.7亿人次。 2、 祝贺!国羽男队第11次夺得汤姆斯杯冠军,国羽女队第16次夺得尤伯杯冠军。 3、…

Windows系统本地部署Net2FTP文件管理网站并实现远程连接上传下载

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

我独自升级崛起加速器推荐 用什么加速器好用 免费加速器推荐

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门,为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素,…

Docker Compose:简化多容器应用部署

序言 在当今的软件开发中,容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一,为开发者提供了方便、快捷、一致的开发和部署环境。但是,当我们的应用开始变得更加复杂,涉及到多个容器时,手动管…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…

vue-cli+vue3+vite+ts 搭建uniapp项目全过程(一)

unapp官方提供了cli 脚手架创建 uni-app 项目的文档 Vue3/Vite版要求 node 版本 18、20使用Vue3/Vite版创建不会提示选择模板&#xff0c;目前只支持创建默认模板 本文以vue3vitets为例 1、初始化项目 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 执行完生成…

OpenHarmony实战开发-请求自绘制内容绘制帧率

对于基于XComponent进行Native开发的业务&#xff0c;可以请求独立的绘制帧率进行内容开发&#xff0c;如游戏、自绘制UI框架对接等场景。 接口说明 开发步骤 说明&#xff1a; 本范例是通过Drawing在Native侧实现图形的绘制&#xff0c;并将其呈现在NativeWindow上 1.定义Ark…

与Apollo共创生态:助力自动驾驶迈向新台阶

引言Apollo七周年大会企业协同工具链携手伙伴共创生态未来展望与总结 引言 2024年4月19日&#xff0c;一场智能汽车未来的盛宴正朝我们走来——Apollo开放平台的七周年大会。 此次大会主题为“破晓•拥抱智变时刻”其中“破晓”象征着新时代的曙光&#xff0c;意味着智能汽车技…

电脑问题2【彻底删除CompatTelRunner】

彻底删除CompatTelRunner 电脑偶尔会运行CompatTelRunner造成CPU占用的资源非常大,所以这里要想办法彻底关闭他 本文摘录于&#xff1a;https://mwell.tech/archives/539只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 解决办法是进入W…