typescript中包含的数据类型:基础数据类型、数组、元组、any和void、null和undefined、never和object、枚举、bigint和symbol、变量声明与解构
1、ts中的数据类型
1.1 基础数据类型
- number类型:双精度64位浮点值,它可以用来表示整数和分数
- Boolean类型:表示逻辑值,true和false
- strig类型:一个字符系列,使用单引号(''),或双引号("")来表示字符串类型,反引号(``)来定义多行文本和内嵌表达式
总结:
- 数值、字符串和布尔值是我们开发中最常使用的基本数据类型,与js中的数值,字符串和布尔完全一致。
- 在ts中我们主要做类型校验使用。
1.2 数组
- 数组:声明变量的一组集合称为数组
export default{}
//数组的基本使用
//方式一
//表示定义一个名称叫做beautyArr的数据,这个数组中的将来只能够存储数值类型的数据
let beautyArr:string[];
beautyArr=["刘亦菲","刘诗诗"];
// beautyArr=["刘亦菲","刘诗诗",100];
console.log(beautyArr);
//方式二
//表示定义了一个名称叫做numArr的数组,这个数组中将来还可以存储数值类型的数据,也可以存储字符串类型的数据
let numArr:Array<number>;
numArr=[1,2,3,4]
console.log(numArr);
//方式三:联合类型
//表示定义了一个名称叫做myBeauty的数组,这个数组中可以存储任意类型的数据
let myBeauty:(number|string|boolean)[];
myBeauty = ["刘亦菲","刘诗诗",18]
myBeauty = ["刘亦菲","刘诗诗",18,true]
console.log(myBeauty);
//方法四:任意类型any
//表示定义了一个名称叫做arbitraily的数组,这个数组中将来可以存储任意类型的数据
let arbitraily:any[]
arbitraily=[100,"关",true]
console.log(arbitraily);
/*
数组是我们前端开发过程中最常用的引用类型之一,因此我们务必熟练掌握数组的几种定义方式
*/
1.3 元组
- 元组类型:tuple
- ts中的元组类型其实就是数组类型的扩展
- 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同
export default{}
//元祖类型 Tuple
//表示定义了一个名称叫做tup1的元组,这个元组中可以存储3个元素
//第一个元素必须是字符串类型,第二个元素必须是数字类型,第三个元素必须是布尔类型
let tup1:[string,boolean,number]
tup1=["关晓彤",true,18]
console.log(tup1);
/*
总结:
定义:['','',...]
作用:元组用于保存一定长度数据类型的数据
*/
1.4 any与void
- any:表示任意类型,当我们不清楚某个值的具体类型的时候我们就可以使用any
- void:当一个函数没有返回值时,通常回见到其返回值的类型时void
//any类型
//any表示任类型,当我们不清楚某个值的具体类型的时候我们就可以使用any1/在TS中任何数据类型的值都可以负责给any类递
//使用场景一
//变量的值会动态改变时,比如来自用广的输入,任意值类型可以让这些变量H过编邘阶段的类型松查
let temp:any;
temp="刘亦菲" //字符串类型
temp =18; //数字类型
temp=true //布尔类型
console.log(temp);
//使用场录二
//改写现有代码时,任意值允许在编译时可选挥地彩含或移除类型检查
let x: any = 4;
// x.ifItExists(); //正确,if工tExists方法在运行时可能存在,但这里并不会监查
x.toFixed();//正确
console.log(x);
//使用场景三
//定义存储各种类型数据的数组时
let beautyList: any[] =[1,false,'fine'];
beautyList[1]=100;
console.log(beautyList);
//void类型
//某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。
//当一个函数没有返回值时,你通常会见到其逐回值类型是void
//在TS中只有null 和 undefined可以赋值给void类型
function makeMoney():void{
console.log("I want");
//return "100k" //报错
}
makeMoney()
let value:void;
//定义了一个不可以保存任意类型数据的变量,只能保存null和undefined
// value = 100;//报借
// value =“杨";//报错
// value = true;//报错
//注意点:null和undefined是所有类型的子类型,所以我们可以将null和undefined赋值给任意类型
//严格模式下会null报错
// value= null;//不会报错
value = undefined;//不会报错
console.log(value);
1.5 null与undefined
- Typescript中undefined和null两者各自有自己的类型分别叫做undefined和null,和void相似。
- 非严格模式下,可以把null和undefined赋值给number类型的变量
export default{}
// TypeScript里,undefined和null两者各自有自己的类型分别叫做undefined 和null.
//和 void相似,它们的本身的类型用处不是很大
let x:undefined = undefined;
let y:null = null;
// x="留";
// x=18;
// y="liu";
// y=19
//非严格模式下,可以拍 null和undefined值给number类型的变量。
let money :number=100;
money= null;
money = undefined
// console.log(money);
1.6 never与object
never类型:表示的有那些永远不存在的值的类型。是那些总是会输出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回类型,变量也可能是never类型,当它们被永不为真的类型保护所约束
object类型:表示非原始类型,也就是除了number,string,boolean,symbol,null和undefined之外的类型定义了一个只能保存对象的变量。
export default{}
//Never关型
//never类型表示的是那些永不存在的值的类型
//例如: never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型
//变量也可能是never类型,当它们被永不为真的类型保护所约束时。
//注意点: never类型是任何类型的子类型,也可以赋值给任何类型,然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。
//即使any也不可以赋值给never
//返回never的函数必须存在无法达到的终点
function error(message:string):never{
throw new Error(message)
}
error("鞠婧祎");
//推断的返回值类型为never
function fail(){
return error("Somethimg failed")
}
//返回never的函数必须存在无法达到的终点
function infiniteLoop():never{
while (true) {
}
}
//object类型
//表示一个对象
//定义了一个只能保存对象的变量
let goddess:object;
//goddess=true;
// goddess="刘亦菲";
// goddess=18;
goddess={name: "刘亦菲",age: 18};
console. log(goddess);
1.7 枚举
enum类型是对JavaScript标准数据类型的一个补充。
本质枚举类型是数字,所以数字是可以的
还分为:字符串枚举,异构枚举
export default{}
/* enum Gender{
Male, //男
Female //女
}
/* let sex;
sex=1; //男
sex=2; //女
*/
/* let gender:Gender;
gender=Gender.Male;
gender=Gender.Female; */
/*
本质枚举类型是数字,所以数字是可以的
gendder="666";
gender=true; */
// gender=10; */
// ts中的枚举类型的取值默认是从上至下,从0开始
// 且然默认是从0开始远递增的,但是我们也可以手动的指定枚举的取值的值
// 如果手动指定了前面枚举值的取值,那么后面枚举值的取值会根据前面的值来递增
/* enum Gender{
Male, //男
Female //女
}
console.log(Gender.Male); //0
console.log(Gender.Female); //1
*/
// 我们还可以同时修改多个枚举值的取值,如果同时修改了多个,那么修改的是什么最后就是什么
/* enum Gender{
Male=2, //男
Female=3 //女
}
console.log(Gender.Male); //2
console.log(Gender.Female); //3
*/
/* enum Gender{
Male, //男
Female //女
}
console.log(Gender.Male); //0
console.log(Gender[0]); //字面量Male
*/
/*
enum Gender{
Male, //男
Female //女
}
const getNum=()=>200
let gender:Gender;
gender=Gender.Female;
gender=100;
gender=getNum();
*/
// 字符串枚举
enum Direction{
Up="Up",
Down="Down"
}
console.log(Direction.Up); //UP
console.log(Direction.Down);//Down
console.log(Direction[0]);//undefind
console.log(Direction["Up"]);//Up
//报错
/* let x:Direction;
x=Direction.Down;
x="左";
const getDirection=()=>"右";
x=getDirection() */
// 异构枚举
enum Gender{
Male=1, //男
Female ="女"
}
console.log(Gender.Male);
console.log(Gender.Female);
console.log(Gender[1]);
console.log(Gender["女"]);//undefind
1.8 bigint与symbol
bigint类型:表示非常大的数
symbol类型:表示全局唯一引用
export default{}
//bigint
// let hundrde1:bigint=100 //报错
let hundred1:bigint=BigInt(100);
let hundred2:bigint=100n;
console.log(hundred1);
console.log(hundred2);
//Symbol
let firsName=Symbol("name")
let secionName=Symbol("name")
console.log(firsName); //Symbol("name")
console.log(secionName); //Symbol("name")
1.9 变量声明与解构
export default{}
// 数组解构
// 一
/* let goddess = ["我","你"]
let [first,second]=goddess;
console.log(first);
console.log(second)
*/
// 二
/* let goddess = ["我","你","她","与","它"]
let [third,...rest]=goddess;
console.log(third); //我
console.log(rest); ["你","她","与","它"]
*/
// 三
let goddess = ["我","你","她","与","它"]
let [,fourth,,fifth]=goddess;
console.log(fourth); //你
console.log(fifth); //与
// 对象解构
let beauty ={
name:"王",
age:20,
sex:"女",
}
let {name,age,sex}=beauty;
console.log(name);
console.log(age);
console.log(sex);