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

TypeScript学习笔记1---认识ts与js的异同、ts的所有数据类型详解

前言:去年做过几个vue3+js的项目,当时考虑到时间问题,js更加熟悉,学习成本低一点,所以只去了解了vue3。最近这段时间补了一下ts的知识点,现今终于有空来码文章了,做个学习总结,方便以后复习。(与文章中有表达不妥的地方欢迎指正,一起进步!)

一、TypeScript的基本概念

  • TypeScript编程语言是微软推出的一款开源的开发语言
  • TypeScript是JavaScript的超集。TypeScript也是基于JavaScript来进行开发的,具备JavaScript所有特性,支持完整的ES6\ES5等等语法。
  • 学习TypeScript就相当于在学习JavaScript,更多要学习的TypeScript中编程规范
  • 比如TypeScript中我们可以进行数据类型约束,一旦有了约束后我们程序设计会更加规范

二、回顾JavaScript特点

JavaScript是弱类型语言,在js中定义变量无需声明数据类型,数据类型都是根据赋的值来确定的

var i = 10
var k  = "xianzhi"typeof i ===>number
typeof k ===>string

如果我对i这个变量进行修改,i的数据类型就会随之改变

i = "heiheihei"typeof i ===>string

 与弱类型语言对应的就是强类型语言,比如Java、C++等

强类型语言一旦在定义变量的时候,确定了数据类型,以后就只能赋值相同数据类型的结果

int i = 10  --->int代表数据类型,整数类型i = "heiheihei" //程序会报错

所以JavaScript会有一些缺点:我们的代码经常在运行过程中才发生报错,而Typescript正好可以帮助我们,在编写代码的时候就检测到错误。

三、Typescript能帮助我们解决的问题

  • TS是JS的超集,完全遵循我们ES5、ES6的标准。写TS代码就是在写JS代码。只是提供了更多的约束。更多规范要求我们写代码必须按照规范来写,否定编译不通过。
  • TypeScript代码——-编译——JavaScript
  • 这个编译过程会检测你的语法是否正确,如果语法有问题,规范不正确,那就会抛出异常。
  • 可以减少代码在运行时报错

四、Typescript的数据类型

1、数字类型:number

var price:number = 20
price = true //报错.必须指定price值为number才能编译通过

2、字符串类型:string

var username:string = "hhhhhh"
username = "jjjjj"

3、布尔类型:boolean

var flag:boolean = true
flag = false

4、数组类型

数组类型语法1  :number[]  :string[]
// 语法一
let array:number[] = []
array.push(1)
array.push(2)let array2:string[] = []
array2.push("xiaowang")
array2.push("1")

注:定义数组时定下来了里面的数据类型,以后这个数组就只能存放对应的数据类型,放错数据类型就会报错

数组类型语法2  :Array<number>  :Array<string>
let array3:Array<number> = []
array3.push(1)

这里使用到了泛型,Array代表数组类型,<number>数组里面存放的number数据类型

5、 undefined和null

在TS中我们一般用undefined和null来表现我们可能出现的特殊情况.

/*** undefined 和 null* 在TS中,变量没有赋值之前不能使用* a的数据类型要么number,要么undefined*/
let a: number | undefined;
console.log(a,'赋值前');
a = 66;
console.log(a,'赋值后');let b: string | null = null;
console.log(b,'赋值前');
b = "heiheihei";
console.log(b,'赋值后');

输出结果: 

6、元组类型

元组类型是数组类型一种衍生,扩展.

数组类型默认只能存放统一数据类型的值.要么全是number\要么全是string类型

如果一个数组要存放多个数据类型,就可以考虑用元组来实现

let point:[number,string,boolean] = [1,"heiheihei",true]

7、枚举类型

这里先说一个场景:比如一条网络攻击,有“攻击失败”、“攻击成功”、“攻击中”等多个状态,如以下代码

//后端传过来的数据
const record = {id:1,name:"永恒之蓝",state:1
}
//前端处理逻辑
if(record.state==1){}else if(record.state==2){}

这里的state是后端代表攻击状态的字段,我们需要去猜测1/2/3代表什么意思,就是这里是魔鬼数字,以前处理我们就是给代码加注释,但是ts代码可以这样写一个枚举类型:

// 后端数据
const record = {id:1,name:"永恒之蓝",state:1
}/*** 枚举类型*/
enum recordState {attackSuccess=1,attackError=2,attackIng=3
}if(record.state == recordState.attackSuccess){}else if(record.state == recordState.attackError){}else if(record.state == recordState.attackIng){}

注:枚举类型里面状态必须是有限的,一旦写了以后代码就可以直接用枚举中的状态,代码解构会更加清晰

8、any类型

表达任意类型的一个基础类型,主要用于表达哪些无法用准确的数据类型来进行表示的场景

比如我们要获取页面上某个节点,这种情况下我们不好用数据类型来表达,为了满足ts的规范,我们可以使用any来进行类型声明

定义一个数组,这个数组里数据可以有多种类型

let age:any = "xiaowang"
age = 20  //any意义就不大const element:any =  document.getElementById("app")let array:any = [1,"xiaowangf",true] //编译没有问题

9、never类型 

  • never类型表示哪些永远不存在的值
  • never类型的应用场景比较局限,主要表达哪些总会抛出异常或者不会有返回值的函数表达式或者箭头函数。
let others:never;
others = (()=>{throw new Error("错误")
})()

10、object类型

在TS开发过程中object类型可以表达三种结果,表示值为{}、也可以[]、还可以是function

/*** object数据类型*/
let obj1:object = {}
let obj2:object = []
let obj3:object = function(){
}
let obj4:object = {id:1}
console.log(obj4.id); //报错,obj4找不到id属性

 这里的obj4.id会报错:

修改成这样就不报错了:

let obj4:{id:number} = {id:1}

 

定义一个对象,要明确告诉TS代码,我的对象里面有哪些东西

let student:{id: number;name: string}
student = {id:1,name:"ddd"}

相关文章:

TypeScript学习笔记1---认识ts与js的异同、ts的所有数据类型详解

前言&#xff1a;去年做过几个vue3js的项目&#xff0c;当时考虑到时间问题&#xff0c;js更加熟悉&#xff0c;学习成本低一点&#xff0c;所以只去了解了vue3。最近这段时间补了一下ts的知识点&#xff0c;现今终于有空来码文章了&#xff0c;做个学习总结&#xff0c;方便以…...

华为数通方向HCIP-DataCom H12-821题库(更新单选真题:1-10)

第1题 1、下面是一台路由器的部分配置,关于该配置描述正确的是? [HUAWEllact number 2001 [HUAWEl-acl-basic-2001]rule 0 permit source 1.1.1.1 0 [HUAWEl-acl-basic-2001]rule 1 deny source 1.1.1.0 0 [HUAWEl-acl-basic-2001]rule...

【车载开发系列】单片机烧写的文件

【车载开发系列】单片机烧写的文件 【车载开发系列】单片机烧写的文件 【车载开发系列】单片机烧写的文件一. 什么是bin二. 什么是Hex三. 什么是Motorola S-record&#xff08;S19&#xff09;四. ELF格式五. Bin与Hex文件的比对六. 单片机烧写文件的本质 一. 什么是bin bin是…...

pyqt 用lamada关联信号 传递参数 循环

在PyQt中&#xff0c;使用lambda函数来关联信号并传递参数是一个常见的做法&#xff0c;尤其是在需要为不同的对象实例关联不同的槽函数参数时。但是&#xff0c;需要注意的是&#xff0c;直接使用lambda可能会导致一些不易察觉的错误&#xff0c;尤其是当它在循环中使用时。这…...

adb命令

adbclient adbserver adbd 三者之间的关系 adbclient, adbserver, 和 adbd 是 Android Debug Bridge (ADB) 组件中的三个主要组成部分。它们各自扮演着不同的角色&#xff0c;共同协作来实现设备调试和管理的功能。下面我将详细介绍这三个组件之间的关系&#xff1a; adbd (A…...

Spring Boot项目热部署

Spring Boot项目热部署是什么 Spring Boot项目热部署是一种开发时的优化技术&#xff0c;可以使开发人员在修改代码后不需要重新启动应用程序即可实时看到修改的效果。在传统的开发模式中&#xff0c;每次修改代码后都需要重新编译、打包和部署应用程序&#xff0c;这样会浪费大…...

Chat App 项目之解析(八)

Chat App 项目介绍与解析&#xff08;一&#xff09;-CSDN博客文章浏览阅读340次&#xff0c;点赞7次&#xff0c;收藏3次。Chat App 是一个实时聊天应用程序&#xff0c;旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录&#xff0c;还提供了…...

CAAC无人机飞行执照:学习内容与考试流程详解

CAAC无人机飞行执照的学习内容与考试流程是无人机爱好者及从业者必须了解的重要信息。以下是对这两方面的详细解析&#xff1a; 学习内容 CAAC无人机飞行执照的学习内容涵盖了多个方面&#xff0c;以确保学员能够全面掌握无人机飞行和应用的技能。主要学习内容包括&#xff1a…...

苹果手机怎么连接蓝牙耳机?3个方案,3秒连接

在快节奏的现代生活中&#xff0c;无线蓝牙耳机因其便捷性和自由度成为了许多人的首选。那么&#xff0c;苹果手机怎么连接蓝牙耳机呢&#xff1f;本文将为您介绍3种快速连接苹果设备与蓝牙耳机的方案&#xff0c;让您在享受音乐、通话或观看视频时&#xff0c;不再受线缆束缚&…...

CAD图纸加密软件有哪些?10款超级好用的CAD图纸加密软件推荐

在数字化设计日益普及的今天&#xff0c;CAD图纸作为企业的核心资产&#xff0c;其安全性变得尤为重要。为了防止图纸被非法获取、篡改或泄露&#xff0c;使用专业的CAD图纸加密软件成为了许多企业和设计师的首选。本文将为您推荐10款在2024年表现突出的CAD图纸加密软件&#x…...

【html+css 绚丽Loading】000011 三元轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…...

算法学习018 求最短路径 c++算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析

目录 C求最短路径 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C求最短路径 一、题目要求 1、编程实现 给定n个顶点&#xff0c;每个顶点到其它顶点之间有若干条路&#xff0c;选择每条路需要消耗一定…...

vue-element-admin——<keep-alive>不符合预期缓存的原因

vue-element-admin——<keep-alive>不符合预期缓存的原因 本文章&#xff0c;以现在中后台开发用的非常多的开源项目vue-element-admin为案例。首先&#xff0c;列出官方文档与缓存<keep-alive>相关的链接&#xff08;请认真阅读&#xff0c;出现缓存<keep-ali…...

基于ElementPlus的分页表格组件ReTable

分页表格ReTable 组件实现基于 Vue3 Element Plus Typescript&#xff0c;同时引用 vueUse lodash-es tailwindCss (不影响功能&#xff0c;可忽略) 基于ElTable和ElPagination组件封装的分页表格&#xff0c;支持本地分页以及远程请求两种方式。本地数据分页自带全量数据的…...

力扣题/图论/课程表

课程表 力扣原题 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课…...

SQL进阶技巧:基于指定规则的缺失值填充问题

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 有如下breed表。表中有breed、dt、value字段,value值中存在大量的NULL值,NULL值为缺省值,缺省值需要按照一定规则进行填充。 规则如下: 用表中value值紧邻且非空的两行均值进行填充。 1 数据准备 with bre…...

【气象百科】光伏自动气象站的功能优势

随着全球对可再生能源需求的日益增长&#xff0c;光伏发电作为清洁、可再生的能源形式&#xff0c;正逐步成为推动能源转型的重要力量。而光伏自动气象站&#xff0c;作为光伏电站智能化管理的重要组成部分&#xff0c;其独特的功能优势在提升光伏系统效率、优化运维策略、增强…...

嵌入式AI快速入门课程-K510篇 (第二篇 Ubuntu的基础操作)

第二篇 Ubuntu的基础操作 文章目录 第二篇 Ubuntu的基础操作1. 安装 VMware 运行 Ubuntu1.1 安装 VMware 1.2 使用VMware打开Ubuntu1.2.1 下载、解压Ubuntu映像文件1.2.1 在BIOS上启动虚拟化(virtualization)1.1.1 使用VMware运行Ubuntu 2.第1章 Ubuntu操作入门1.1 Ubuntu下打开…...

android13隐藏调节声音进度条下面的设置按钮

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码修改 4.编译运行 5.彩蛋 1.前言 将下面的声音调节底下的三个点的设置按钮,隐藏掉。 效果如下 2.情况分析 查看布局文件 通过布局我们可以知道这个按钮就是 com.android.keyguard.AlphaOptimizedImageB…...

Java ArrayList和LinkedList

ArrayList ArrayList是Java中最常用的数据结构之一&#xff0c;它是一个动态数组的实现&#xff0c;允许你在程序中存储和管理一个可变大小的对象列表&#xff0c;我们可以添加或删除元素。 ArrayList 继承了 AbstractList &#xff0c;并实现了 List 接口。 基本概念 Arra…...

STM32F030行列式按键扫描

1&#xff09;行扫说明&#xff0c;行列式按键扫描时&#xff1a; 行输出&#xff1a;行逐一输出高电平&#xff0c;其他的为低&#xff0c;既循环只输出一个高电平&#xff1b; 列读入&#xff1a;所有列通过下拉电阻100K后&#xff0c;都变为低电平&#xff0c;逐一读入&…...

FPGA 综合笔记

仿真时阻塞赋值和非阻塞赋值 Use of Non-Blocking Assignment in Testbench : Verilog Use of Non-Blocking Assignment in Testbench : Verilog - Stack Overflow non-blocking assignment does not work as expected in Verilog non-blocking assignment does not work a…...

Android MVVM框架详解与应用

在Android开发中&#xff0c;随着应用复杂度的增加&#xff0c;如何有效地组织和管理代码成为了一个重要的问题。MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式因其清晰的结构和高效的开发效率&#xff0c;逐渐成为Android开发者们青睐的架构模式之一。本文将详细…...

浅析KHD-厨帽检测算法从源码到实际应用的方案

厨帽检测算法&#xff0c;作为计算机视觉技术在食品安全领域的一项重要应用&#xff0c;其实际应用过程涉及多个方面。 厨帽检测算法主要基于深度学习技术&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;和目标检测框架&#xff08;如YOLO、Faster RCNN等&#xff…...

ESXi里的FreeBSD装bhyve Ubuntu子系统,外网不通,子系统里无法ping通外面(使用NAT解决)

ESXi里的FreeBSD装bhyve Ubuntu子系统&#xff0c;子系统里无法ping通外面&#xff0c;除了宿主机&#xff0c;其它ip都ping不通。&#xff08;另一台FreeBSD物理机同样的bhyve ubuntu子系统&#xff0c;网络就是通的&#xff0c;但是TrinityCore服务lag延时很大&#xff09; …...

Connectionist Logic Systems and Hybrid Systems by Translation

Connectionist Logic Systems Definition: Connectionist Logic Systems (CLS) are computational models that combine elements of connectionism (neural networks) with symbolic logic. These systems aim to leverage the strengths of both paradigms—connectionism’…...

盘点数据摆渡的8种常用方式 最推荐哪一种?

跨网数据摆渡是很多企业面临的一种传输场景&#xff0c;因为大部分企业为了保护核心数据&#xff0c;都会做不同级别的网络隔离&#xff0c;所以数据摆渡会涉及不同网络之间的数据传输和整合。这种情况下&#xff0c;数据需要从一个组织或地理位置传输到另一个组织或地理位置&a…...

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件&#xff0c;继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能&#xff0c;主要用于在加载内容时显示进度。它的一些主要特点如下&#xff1a; 自动隐藏和显示&#xff1a;ContentLoadingProgressBar 会在…...

基于数据复杂度的数据库选型

数据模型的选择对于 IT 系统的开发至关重要&#xff0c;它不仅决定了数据存储和处理的方式&#xff0c;影响系统的性能、扩展性以及维护性等。本质上来说&#xff0c;不同的数据模型反映了我们对业务问题的不同思考和抽象程度。 今天我们从不同数据模型对于复杂数据和关系的支…...

QT基础知识5

思维导图 client.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this))//给客户端实例化分配空间 {ui->setupUi(this);//初始化界面ui->msgEdit-&…...

小程序开发和app开发差别/seo教学培训

B- 树 B-树又名B树&#xff0c;我们把所有的数据进行折半块查找&#xff0c;比如一共100条数据。在30和60的地方分一下&#xff0c;存放30和60的节点就是根节点。30和60就是该节点的关键字&#xff0c;100也就是分成了3份&#xff0c;这个节点自动创建三个指针。这三份就是根节…...

县区级政府网站建设现状/广州网站设计

1、windows聚焦图片目录路径&#xff1a; C:\Users\Er\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 2、建立bat 文件 内容&#xff1a; ren *.* *.jpg 转载于:https://www.cnblogs.com/BlogOfEr/p/10048193.html...

想做一个赌钱网站怎么做/郑州做网站的大公司

Hive 中对数据访问&#xff0c;有两个服务&#xff0c;Metastore Server 与 HiveServer2。 注意 &#xff1a; 这两个服务是不一样的&#xff0c;简单来说 &#xff1a; Metastore Server 负责对元数据的访问&#xff0c;即表结构&#xff0c;库信息。如 &#xff1a; SHOW DA…...

wordpress 相关文章 图片/seo广告投放

今天&#xff0c;我们来谈谈一个新仓库应该如何规划&#xff01;仓库先进先出规划1. 进出从不同的门进行&#xff0c;入库从进仓门进&#xff0c;出库从出仓门出。2. 联单制&#xff0c;每箱设两联单&#xff0c;一联贴箱上&#xff0c;一联放文件夹内&#xff0c;依据入仓时间…...

厦门房地产网站建设/小红书关键词热度查询

K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它&#xff1f;来这里&#xff0c;大型互联网公司一线工程师亲授&#xff0c;不来虚的&#xff0c;直接上手实战&#xff0c;3天时间带你搭建K8s平台&#xff0c;快速学会K8s&#xff0c;点击下方图片可了解…...

网站 虚拟目录/网络营销网站有哪些

参照我原来的文章打包上传pypi包时报错&#xff1a; Python编程&#xff1a;为世界贡献你的轮子-pipy打包 error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)> 看到网上说此方法已经不支持 需要用 twine 模块打包 参考…...