TS学习笔记二:基础类型及变量声明

  本节介绍TypeScript中的基础类型及变量声明方式的说明。TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。基础类型包括:数字,字符串,结构体,布尔值等。

  1. 学习视频

    TS学习笔记二:基础类型与变量定义

  2. B站视频

    TS学习笔记二:基础类型与变量定义

  3. 西瓜视频
    https://www.ixigua.com/7320418431852642857

在这里插入图片描述

一、基础类型

  TypeScript基础类型中包括数字,字符串,结构体,布尔值等。变量指定类型时使用“:”加类型名指定变量类型。
1. 布尔值
  布尔类型,使用boolean什么,定义方式:let isOk:boolean = false;

2. 数字
  数字类型,包括整数、浮点数等都是用number进行定义, 除了支持十进制和十六进制字面量,Typescript还支持ECMAScript 2015中引入的二进制和八进制字面量。定义方式如下:

let a :number = 1;
let a :number = 0xf00e;
let a :number = 0b1010;
let a :number = 0o711;

3. 字符串
  使用标识符string定义字符串,可使用“””或“’”标识字符串,定义方式:

let str:string =222let str:string =34234;

  也可使用模板字符串,定义多行文本和内嵌表达式,使用`进行定义,使用${}嵌入表达式,定义方式如下:

let a:string =2;
let b:number=22;
let str:string = `This is ${a} and ${b+1}`;

  也可以使用如下定义,结果一致:

let str:string = ‘This is+ a + ‘ and ’ + (b+1);

4. 数组
  TypeScript中有两种方式可以定义数组。 第一种,可以在元素类型后面接上[],表示由此类型元素组成的一个数组:let list: number[] = [1, 2, 3];
  第二种方式是使用数组泛型,Array<元素类型>:

let list: Array<number> = [1, 2, 3];

5. 元组
  元组是TypeScript中特有的,可以定义一个已知数量和类型的数组,且各个元素的类型不必相同,定义方式和数组类型,具体如下:

let x :[number,string,boolean]  =  [1,2,false];

  当使用索引进行访问时,可以得到索引所对应的元素的具体类型,如x[0]可获取到第0个元素的数据类型,并可以使用该类型对应的方法。
  当访问越界的元素时,元素的类型使用联合类型代替,即指定的所有类型中任何一种,如给x[4] = 3,此时下标4已经越界,且定义的时候没有指定具体的类型, 这个时候使用number或string或boolean中的任何一个类型来进行标识,设置值的时候只要是这三个类型中的任何一个都可以,超出这三个的范围则不行。获取元素时,对应的类型也是联合类型,可访问这三个属性都具有的共工属性或方法,如x[4].toString()可正常执行,因为number、string和boolean都具有toString方法。
  此处的联合类型是一个高级类型,将在后续的章节中介绍到。

6. 枚举
  枚举是TypeScript补充的类型,使用enum进行定义,像其它高级语言一样,使用枚举类型可以为一组数组赋予更加友好的名字,定义方式如下:

enum Color{Blank,Blue,Red};
let color:Color = Color.Blank;

  默认情况下,枚举的下标是从0开始,即上述例子中的Blank的值是0,Blue的值是1,下一个是上一个的值+1。也可以通过手动指定的方式设置开始值,设置方式如下:

enum Color{Blank = 1,Blue,Red};
let color:Color = Color.Blank;

  也可以给全部值都使用手动赋值,具体定义方式如下:

enum Color{Blank = 1,Blue = 2,Red = 3};
let color:Color = Color.Blank;

  枚举类型也可以使用枚举的值得到对应的名字,获取方式如下:

enum Color{Blank = 1,Blue = 2,Red = 3};
let colorName:string = Color[2];

7. 任意值
  编程阶段不清楚类型的变量,为了烧开类型检查器,可以使用任意值进行标识,关键字为any,定义方式:let a:any = 121,a = ‘2’;可以设置任意类型。
  可以对现有代码进行改写的时候,能够允许在编译时包含或移除类型检查,和Object有类似作用,但Object类型的变量只允许给它赋任意值,但是不能在它上面调用任意的方法,即使方法存在。
  也可以在定义数组时只知道一部分数据类型的时候进行使用,如:let arr:any[] = [1,’2’,’4’];

8. 空值
  关键字为void,与any类型相反,标识没有任何类型,通常用于函数的返回值的类型设置,定义如下:

function a():void{}

  声明void类型的变量没有意义,只能赋予undefined和null。

9. Null和Undefined
  对应js中的原生类型null和undefined,和空值void类似,本身的类型用处不大,定义方式如下:

let a:undefined = undefined;
let b:null = null;

  默认情况下null和undefined是所有类型的子类型,可以把null和undefined赋予number等类型的变量。然而当指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自。

10. Never
  Never类型标识永不存在的值的类型,可用于哪些总是会抛出异常或者根本不会有返回值的函数表达式或箭头函数表达式的返回值类型。
  Never是任何类型的子类型,也可以赋值给任何类型,没有类型是naver的子类型或可以赋值给never类型(除了never类型本身之外),即使any也不可以赋值给never。使用示例如下:

function error(msg:string):never{//函数不可能有返回值throw new Error(‘error’);
}
function fail(){//推断类型为neverreturn error(‘ss’);
}
function loop():never{//函数无法结束while(true){}
}

11. 类型断言
  当能明确知道比现有类型更具体的类型的时候,可以使用类型断言进行设置,类型断言好比其它语言中的类型转换,只是不进行特殊的数据检查和解构,没有运行时的影响,只是在编译阶段起作用。有两种使用方式:
一是尖括号的语法:

let a:any = ‘fsfds’;
(<string>a).indexOf();

二是as语法:

let a:any = “fsdfds”;
(a as string).indexOf();

两种方式是等价的,ts中使用jsx时,只允许使用as语法。

二、变量声明

  变量的声明包括var、let和const等方式,不同的定义方式具有不同的效果及注意事项,有自己的作用域及规则。
1. var声明
  var是早期的变量定义关键字,如:var a = 10;可以定义任意类型的变量,也可以函数内部定义变量:

function a(){var b = 10;
}

  也可以因为作用域的延伸,在函数内部使用外部的参数,定义方式如下:

function a(){let b = 1;function c(){let d = b+1;}
}

  var声明的变量,存在变量提升的情况,可以在包含它的函数、模块、命名空间或全局作用域内部任何位置被访问,代码块也没有影响,因此多次声明同一个变量并不会报错,而且在定义之前进行变量访问也不会报错,也可以进行多次定义,只是定义的变量只有一个实例。

a = 1;
var a;

2. Let声明
  let声明和var类型,如let a= 20;但具体的作用域规则和var是有区别的,当用let声明一个变量,它使用的是词法作用域或块作用域。不同于var声明的变量可以在包含它们的函数外访问,块作用域变量在包含他们的块或for循环之外是不能访问的,示例如下:

function a (){let a = 100;if(a){let b = 1;	}return b;//此处会报错,无法访问变量b但是如果b变量是使用var声明的,则可以访问。
}

  catch中的变量也是具有同样的作用域规则,块级作用域的变量不能在声明之前访问,var声明的变量就可以,如:

a = 1;//此处会报错,变量未定义
let a ;

  可以在一个拥有块作用域变量被声明前获取它。 只是我们不能在变量声明前去调用那个函数。

function foo() {return a;
}

// 不能在’a’被声明前调用’foo’, 运行时应该抛出错误

foo();
let a;

  let声明的变量不能重复定义,即同一个各作用域内,同样名称的变量只能有一个,重复定义会报错,示例如下:

let a = 1;
let a = 1;//此处会报错,变量重复定义,使用var时就不会

3. Const 声明
  const声明的变量和let类似,但其值在定义时赋值后就不能再次更改,其作用域规则和let类型,不可重复定义,只是块级作用域,不能在声明之前访问,唯一的区别就是不可重复赋值。

const a = 1;
a = b;//此处会报错。

  修改const定义的对象内部的属性是允许的,具体如下:

const obj = {a:1,b:2
}
obj = {};//此处会报错。
obj.a = 2;//修改属性可以

  所用变量除了需要有修改的过程,都建议使用const。

4. 解构数组
  数据解构,使用方式如下:

let a = [1,2,3];
let {c,d,e} = a;
//此时c = 1;d = 2,e = 3;类似于使用了let c = a[0]这样的定义方式。

  也可以使用解构进行变量的值交换,如[a,b] = [b,a],也可用于函数的参数,如下:

function ([a,b]:[number,number]){
}

  若只取一部分数据,则使用…剩余参数的方式进行定义,使用方式如下:

let [a ,...other] = [1,2,3,4,5];	//此时a为1,other为[2,3,4,5]

  也可以直接忽略其余的参数,如:

let [a] = [1,2,3,4]; //此时a为1,其余的将会丢弃。

  也可以忽略指定元素,如:

let [a,,b,c] = [1,2,3,4]//此时a为1,b为3,c为4,2将被忽略。

5. 对象解构
  对象解构如下:

let obj = {a:1,b:2,c:3
}
let {a,b} = obj;//此时a= 1,b=2;

  不需要的属性可以直接忽略,相当于:let a = obj.a ,let b = obj.b定义并赋值。也可以使用没有声明的赋值,如:

({a,b} = {a:2,b:12})

  可以给属性不同的名字,如:let {a:a1,b:b1} = obj;此处的:不是用于指定其类型的,而是指定其新名称的。
  也可以设置默认值,设置后在属性为undefined时使用缺省值,如下:

function aa (obj:{a:string,b?:number}){let {a,b=111}	= obj;
}

  示例如果参数中的b为undefined,参数obj的属性a和b都有值。

6. 函数声明
  解构也可用于函数声,示例如下:

type C = {a:string,b?:string}function f({a,b}:C):void{
}

  也可以指定参数的默认值:

function f({a,b} = {a:””,b:0}):void{
}

  此实例中调用f时,参数会有默认值。

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

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

相关文章

java发送邮件(注:本章以163邮箱为例)

目录 前言 一邮件服务器与传输协议 二.发送邮件思路 2.1注册163邮箱: 2.2、打开邮箱服务获取授权码 三.代码实现邮件发送 3.1第三方jar包 3.2创建邮件工具类 3.3编写测试类 前言 电子邮件的应用非常广泛&#xff0c;例如在某网站注册了一个账户&#xff0c;自动发送一…

机器学习在什么场景下最常用-九五小庞

机器学习在多个场景中都有广泛的应用&#xff0c;下面是一些常见的应用场景&#xff1a; 自然语言处理&#xff08;NLP&#xff09;&#xff1a;如语音识别、自动翻译、情感分析、垃圾邮件过滤等。数据挖掘和分析&#xff1a;如市场分析、用户画像、推荐系统、欺诈检测等。智能…

你不得不知道的常用 Git 命令

最近在学习的时候发现 git 命令没有自己想象中那么简单&#xff0c;特此做一期 《 常用 Git 命令 》&#xff0c;不仅是给掘友分享&#xff0c;也能巩固自己学到的知识。 在此向大家推荐一个学习 git 指令的小游戏 Learn Git Branching&#xff0c;以通关的方式进行学习&#…

2024年【高处安装、维护、拆除】考试题及高处安装、维护、拆除模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高处安装、维护、拆除考试题是安全生产模拟考试一点通总题库中生成的一套高处安装、维护、拆除模拟试题&#xff0c;安全生产模拟考试一点通上高处安装、维护、拆除作业手机同步练习。2024年【高处安装、维护、拆除】…

电脑的任务栏怎么恢复到底下?简单的4个方法帮你解决!

“我在使用电脑的时候突然发现电脑底部的任务栏不见了&#xff0c;有什么方法可以将任务栏恢复到底下吗&#xff1f;快给我出出主意吧&#xff01;” 在使用电脑时&#xff0c;我们可能会发现电脑的任务栏跑到屏幕顶部或消失的情况。这不仅影响了我们的使用体验&#xff0c;还可…

如何使用左移方法优化性能测试

开发周期早期阶段的性能测试&#xff08;左移方法&#xff09;可以让产品提供更好的性能和更高的投资回报率。查看如何使用左移方法优化性能测试。 每一次冲刺都至关重要&#xff0c;并且做出的决策速度快如闪电。为了促进快速反馈过程&#xff0c;测试团队必须在很短的时间内…

JS逆向实战案例1——某房地产url动态生成

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、 反爬分析 url&#xff1a;aHR0cHM6Ly9uZXdob3VzZS4wNTU3ZmRjLmNvbQ 该站点项目url通过点击JS生成&#xff0c;project_id与生成后…

mysql清空并重置自动递增初始值

需求&#xff1a;当上新项目时&#xff0c;测试环境数据库导出来的表id字段一般都有很大的初始递增值了&#xff0c;需要重置一下 先上代码&#xff1a; -- 查看当前自动递增值 SHOW CREATE TABLE table_name; -- 重建自动递增索引&#xff08;可选&#xff09; ALTER TABLE t…

Spring - 如何控制多个 AOP 切面执行顺序?

众所周知&#xff0c;Spring 声明式事务是基于 AOP 实现的&#xff0c;那么&#xff0c;如果我们在同一个方法自定义多个 AOP&#xff0c;我们如何指定他们的执行顺序呢&#xff1f; 三种解决方案 1、通过实现 org.springframework.core.Ordered 接口 Component Aspect S…

Vue-13、Vue绑定css样式

1、绑定css样式字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"tex…

上海市委网信办技术沙龙|美创科技分享数据流动下的安全应对

为有效提升上海市党政机关和重点单位的技术能力与水平&#xff0c;1月11日&#xff0c;上海市委网信办组织开展以“数据安全治理与合规流动经验分享”为主题的第三十二期网络安全技术沙龙。全市26家党政机关和重点单位相关网络安全技术人员参加此次活动。 美创科技作为上海市委…

关于git删除仓库中原本应该忽略的文件的研究

开门见山&#xff0c;先抛出一个结论&#xff1a; 任何被提交到远程仓库中的数据&#xff0c;都不能被彻底删除&#xff0c;只要提交上去了&#xff0c;就会永远留存。 任何被提交到远程仓库中的数据&#xff0c;都不能被彻底删除&#xff0c;只要提交上去了&#xff0c;就会…

三、04 nginx负载均衡

目录 简介1、准备三台主机且都安装了ngix2、先配置第一个服务主机配置文件nginx.conf制作页面写入页面内容检测语法&重启nginx查看第一个服务器再用同样样的方法 搭建第一个web 服务即可可以使用scp 直接复制 第一个web 服务器的文件配置文件第二个页面的 html 代码 配置代…

分别取出一个时间序列中的年份,月份和日期

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 只留下时间序列中 各行元素的年、月或日 结果的数据类型是序列 Series.dt.year Series.dt.month Series.dt.day [太阳]选择题 以下关于代码输出结果的说法中正确的是? import pandas as pd ts…

“超人练习法”系列09:耶克斯–多德森定律

01 你现有水平和学习风格 搞明白自己是个大事&#xff0c;搞不明白就糊涂一辈子。 首先&#xff0c;要弄清楚自己现在是个啥水平&#xff0c;有啥技能可以拿出来的&#xff0c;然后再定个目标&#xff0c;知道自己想往哪方面努力。 你擅长的学习方式是啥呢&#xff1f;是那种…

第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘

文章目录 一、按键原理二、独立键盘&矩阵键盘2.1 独立按键2.2 矩阵键盘 一、按键原理 原理很简单&#xff0c;当我们没有按下SW2时&#xff0c;由于上拉电阻得作用&#xff0c;使得输入引脚得信号为高电平&#xff0c;当按下按键后&#xff0c;引脚直接接地&#xff0c;输入…

虹科分享 | PCAN工具:强大的CAN通讯解决方案,你了解多少?

导读&#xff1a;在当今的汽车和工业自动化领域&#xff0c;可靠的通讯系统至关重要&#xff0c;PCAN工具为这些应用提供了强大的支持。本文将介绍PCAN工具的功能、应用和优势&#xff0c;以帮助您根据实际需求选择合适的工具和配件。 PCAN 网络允许 PCAN 应用程序&#xff08…

redis原理(二)数据结构

redis可以存储键与5种不同数据结构类型之间的映射&#xff1a; String类型的底层实现只有一种数据结构&#xff0c;也就是动态字符串。而List、Hash、Set、ZSet都由两种底层数据结构实现。通常我们把这四种类型称为集合类型&#xff0c;它们的特点是一个键对应了一个集合的数据…

【MATLAB】【数字信号处理】产生系统的单位冲激响应h(t)与H(z)零极点分布

一、实验目的与要求 产生h(t) 与H(z) 零极点分布 二、实验仪器 微机&#xff0c;仿真软件MATLAB 2022a 三、实验内容与测试结果 1.已知描述连续系统的微分方程为y(t)5y(t)6y(t)2x(t)8x(t) &#xff0c;计算系统的单位冲激响应h(t) 程序如下&#xff1a; clear all; ts0;…

JavaScript采集各大电商平台关于预制菜酸菜鱼销售量

因为我喜欢吃酸菜鱼&#xff0c;但是自己弄又弄不来&#xff0c;想从网上找找看看&#xff0c;但是种类多&#xff0c;自己逐个选择又太浪费时间。索性利用自己专业爬虫知识&#xff0c;一边检验我最近代码水平&#xff0c;另一方面还能选择到满意的年货。过去写个各大平台预制…