学习ts(六)数据类型(元组、枚举、Symbol、never)与类型推论

1.元组

元组(Tuple)是固定数量的不同类型的元素的组合。是数组的变种。
元组与集合的不同之处在于,元组中的元素类型可以是不同的,而且数量固定。元组的好处在于可以把多个元素作为一个单元传递。如果一个方法需要返回多个值,可以把这多个值作为元组返回,而不需要创建额外的类来表示。

let arr: [number, string] = [1, '33']
console.log(arr[0]) // 可以通过索引得到元组中的元素// 支持自定义和可选
let arr1:[x:number, y?:string] = [1]//当元素越界之后会被判断为联合类型
let arr2:[number,string] = [1,'string']
arr.push(true)//error 类型“boolean”的参数不能赋给类型“string | number”的参数。

2.枚举

通过enum定义枚举类型

2.1数字枚举

2.1.1 默认

默认是数字的,并且对应的值从0开始
在这里插入图片描述

2.1.2 增长枚举

enum color{red = 1,green,blue
}
console.log(color.red) //1
console.log(color.green) //2 
console.log(color.blue) //3

2.2 字符串枚举

enum Types{Red = 'red',Green = 'green',BLue = 'blue'
}

2.3 异构枚举

可以混合字符串和数字成员

enum Types{No = "No",Yes = 1,
}

2.4 接口枚举

   enum Types {yyds,dddd}interface A {red:Types.yyds}let obj:A = {red:Types.yyds}

2.5 const枚举

枚举不允许用let和var声明,允许使用const声明。
const声明的枚举会被编译成常量,普通声明的枚举被编译成对象

const enum color{red = 1,green,blue
}
console.log(color.red) //1
console.log(color.green) //2 
console.log(color.blue) //3// 编译成
console.log(1 /* color.red */); //1
console.log(2 /* color.green */); //2 
console.log(3 /* color.blue */); //3
enum color{red = 1,green,blue
}
console.log(color.red) //1
console.log(color.green) //2 
console.log(color.blue) //3// 编译成
var color;
(function (color) {color[color["red"] = 1] = "red";color[color["green"] = 2] = "green";color[color["blue"] = 3] = "blue";
})(color || (color = {}));
console.log(color.red); //1
console.log(color.green); //2 
console.log(color.blue); //3

2.6 反向映射

它包含了正向映射( name -> value)和反向映射( value -> name)
要注意的是 不会为字符串枚举成员生成反向映射。

enum Direction {Up,Down,Left,Right
}console.log(Direction.Up === 0); // true
console.log(Direction[0]); // Up

3.Symbol

3.1是什么

symbol类型的值是通过Symbol构造函数创建的
可以传递参做为唯一标识 只支持 string 和 number类型的参数
在这里插入图片描述

3.2 使用

可以作为属性的键

let s = Symbol('key')
let obj = {[s]: 1
}
console.log(obj[s])
let s = Symbol('key')
class C {[s](){return 'c'}
}let c = new C()
console.log(c[s]())

如何让两个symbol相等:使用for就会去拿着里面的key找有没有注册过这个key,有的话直接拿来用,不创建新的

console.log(Symbol.for('key')  === Symbol.for('key')) //true

如何读取Symbol
for inObject.keys不能读到symbolObject.getOwnPropertySymbols(obj)能获取到且只能获取到SymbolReflect.ownKeys(obj)可以获取到对象所有的属性值,包括普通的和symbol

4.never

表示不应该存在的状态,返回never的函数必须存在无法达到的终点
应用场景:作为兜底的检查,因为case中没有"小杯",所以以下代码在写完之后就会报错

type A = '中杯' | '大杯' | '超大杯' | "小杯"function isXiaoMan(value:A) {switch (value) {case "中杯":break case "大杯":break case "超大杯":break default://是用于场景兜底逻辑const error:never = value;return error}
}

5.类型推论

TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论
在这里插入图片描述
如果你声明变量没有定义类型也没有赋值这时候TS会推断成any类型可以进行任何操作

let ss 
ss = 123
ss = 'sss'
ss = true

类型别名

type str = string
let s:str = "我是小满"type str = () => string
let s: str = () => "我是小满"type str = string | numbertype value = boolean | 0 | '213'

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

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

相关文章

生成式人工智能的潜在有害影响与未来之路(三)

产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域,旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害:设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…

R包开发1:RStudio 与 GitHub建立连接

目录 1.安装Git 2-配置Git(只需配置一次) 3-用SSH连接GitHub(只需配置一次) 4-创建Github远程仓库 5-克隆仓库到本地 目标:创建的R包,包含Git版本控制,并且能在远程Github仓库同步,相当于发布在Github。…

C语言练习2(巩固提升)

C语言练习2 选择题 前言 “志之所趋,无远弗届,穷山距海,不能限也。”对想做爱做的事要敢试敢为,努力从无到有、从小到大,把理想变为现实。要敢于做先锋,而不做过客、当看客,让创新成为青春远航的…

xshell 学习记录

xshell 检查config目录是否在当前目录下存在 current_directory$(pwd) if [ -d "$current_directory/config" ]; then echo "config目录存在于当前目录。" else echo "config目录不存在于当前目录。" fi xshell检查某个端口是否被占用…

HTML 网页中 自定义图像单击或鼠标悬停时放大

HTML 网页中 自定义图像单击或鼠标悬停时放大 一:在悬停时更改 HTML 图像的大小 例子中,使用 CSS 样式;来设置每个图像元素的高宽 200px;以及 10px 边距,以便在图像周围留出空间。 使用 CSS 的 :hover 属性来添加悬停效…

EFCore常见用法

EFCore官方文档置顶,看这个就行。下面的内容只是总结,算是备忘录。 一、创建和删除 //1、创建数据库和表 db.Database.EnsureCreated();//将创建数据库(如果不存在)并初始化数据库架构。 如果存在任何表 (包括另一 DbContext 类)…

概念解析 | 电磁计算的新篇章:智能电磁计算

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:智能电磁计算。 电磁计算的新篇章:智能电磁计算 随着人工智能的飞速发展,我们正处在一个信息爆炸的时代。各个领域&a…

图为科技-边缘计算在智慧医疗领域的作用

边缘计算在智慧医疗领域的作用 随着科技的进步,智慧医疗已成为医疗行业的重要发展趋势。边缘计算作为新兴技术,在智慧医疗领域发挥着越来越重要的作用。本文将介绍边缘计算在智慧医疗领域的应用及其优势,并探讨未来发展方向。 一、边缘计算…

matlab使用教程(19)—曲线拟合与一元方程求根

1.多项式曲线拟合 此示例说明如何使用 polyfit 函数将多项式曲线与一组数据点拟合。您可以按照以下语法,使用 polyfit 求出以最小二乘方式与一组数据拟合的多项式的系数 p polyfit(x,y,n), 其中: • x 和 y 是包含数据点的 x 和 y 坐标的向量 …

laravel中Mail发送邮件失败,但是没有错误信息,该如何调试?

在Laravel中,当使用Mail类发送邮件失败但没有错误信息显示时,可以按照以下步骤进行调试: 检查日志文件: Laravel会记录各种应用程序活动和错误信息。查看应用程序的日志文件,通常位于storage/logs目录下,寻…

Git笔记--分支常用命令

目录 1--git branch -v 2--git branch 3--git checkout 4--git merge 1--git branch -v git branch -v git branch -v 用于查看分支版本; 2--git branch git branch xxxxx # xxxxx表示分支名 git branch 用于创建分支; 3--git checkout git check…

搭建一个spring框架(基于spring.formwork的@Configuration和@Bean注解搭建)

使用 Spring Framework的注解方式来搭建 Spring 框架,以下是基本步骤: **步骤 1:准备开发环境** 确保你的开发环境中有 Java 开发工具(如 JDK)和一个集成开发环境(IDE)。 **步骤 2&#xff1…

uniapp 安卓平台签名证书(.keystore)生成

安装JRE环境 下载jre安装包:https://www.oracle.com/java/technologies/downloads/#java8安装jre安装包时,记录安装目录(例:C:\Program Files\Java\jdk-20)打开命令行(cmd),将JRE安装路径添加到系统环境变量 d: se…

PostgreSQL基本操作总结

安装按PostgreSQL数据库后,会默认创建用户postgres和数据库postgres,这个用户是超级用户,权限最高,可以创建其他用户和权限,在实际开发过程中,会新创建用户和业务数据库,本文主要介绍用户权限和…

Redis Pub/Sub 指南

Redis 不仅仅是一个数据库,还可以作为支持发布和订阅(Pub/Sub)操作的消息代理。本文将使用 Navicat for Redis 简要概述 Redis 的 Pub/Sub 功能。 关于发布或订阅消息范式 Pub/Sub 是一种模式,发送者(广播者&#xf…

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SCNGO-CNN-LSTM-Attention数据分类预测程序,改进算法,融合正余弦和…

最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&#xff01…

spark sql 数据倾斜--join 同时开窗去重的问题优化

spark sql 数据倾斜–join 同时开窗去重的问题优化 文章目录 spark sql 数据倾斜--join 同时开窗去重的问题优化结论1. 原方案:join步骤时,同时开窗去重数据倾斜 2. 优化2.1 参数调优2.2 SQL优化 背景: 需求:在一张查询日志表中&a…

【数据库】Mysql中的索引与失效场景

1、前言 MySQL中数据表设计合理的索引对提高性能很有帮助。使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。 大多数情况下都(默认)采用B 树来构建索引。只是空间列类型的索引使R- 树&#xf…

集合相关知识

1.为什么使用集合 如果让你统计公司每个月的销售额,你会用数组吗?由于数组创建时需要指定其长度,而且不能改变。集合不需要指定长度,空间不够集合自己会调整。集合里有很多见名知意的方法。 java1.8之后新有的removeIf用法 remove…