typescript基础入门一:基本数据类型和解构展开

基础数据类型

boolean,string,number,array,tuple(元组,定义一个已知元素数量和类型的数组,各个元素中的类型不必相同),枚举,any,void,null,undefined,never,object,类型断言

tuple元组

元组类型就是定义一个数组,定义的时候需要定义里面元素的数量和类型,且每个元素的类型不需要相同。例如:

//*表示定义了一个有四个元素的数组,第一个类型为string,第二个为number,第三个为string或number类型,最后一个为number类型的数组
let tuple : [string,number,string | number,number[]];
tuple = ['蒋宗正',123,'csdn',[4,5,6]];

枚举

主要是为了让一些不那么直观的数据有一个比较友好的名字,这样方便代码的维护,比如:

enum BodyType {
  json = 1,
  xml
}
//* 实际上type就是number数据类型1
let type = BodyType.json

any

当不清楚里面需要放什么数据类型,或者可以有放任意数据类型的需求时,我们就可以用any数据类型去跳过ts类型检查器,而当any数据类型被赋值时,我们就可以调用该数据类型上面的方法,例如:

let notSure : any = number[];
notSure.push(1); //这是可以成功的

void

表示没有任何类型,主要用于一个函数没有返回值时使用,声明一个void数据类型时,只能赋予给它undefined和null

let noValue1: void = null;
let noValue2: void = undefined;

null和undefined

null没有值存在,只是值为null,
undefined表示没有值

never

never用来表示永远不存在的值,常用于抛出异常或者根本不会有返回值的函数

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

object

相当于自定义一个数据类型对象,表示非基础数据类型,也就是除除number,string,boolean,symbol,null或undefined之外的类型。(这里注意,object和Object不是同一个类型!!!)

类型断言

主要作用就是告诉编译器,你比ts更知道这个是什么数据类型,我们将其定义为我们想要的数据类型
as语法:

let value: any = [1,2,3];
let length = value.length as number;

解构

什么叫解构呢,我个人觉得就是把一个东西拆分构成一个新的东西,就叫做解构

数组解构赋值

let arrayValue = [1,2,3];
//此时我们将arrayvalue拆成(解构成)三个值,每个值都有对应的值
let [first,second,third] = arrayValue;
console.log(first); //1
console.log(second); //2
console.log(third); //3

还可以使用扩展运算符…去创建剩余变量:

let [first, ...rest] = [1, 2, 3, 4];
console.log(first); // outputs 1
console.log(rest); // outputs [ 2, 3, 4 ]

对象解构

let o = {
    a: "foo",
    b: 12,
    c: "bar"
};
let { a, b } = o;//从o中解构出a,b
let newName1 = o.a;
let newName2 = o.b;

可以在对象里使用…语法创建剩余变量

let { a, ...passthrough } = o;
let total = passthrough.b + passthrough.c.length;

函数声明

解构用于函数声明:

//定义一个数据类型C,它是一个对象,里面的a为string类型,里面的b是一个可选值,为number类型
type C = { a: string, b?: number }
//这时候a就是string类型,b就是number类型
function f({a, b}: C): void {
  
}

展开

展开数组

也叫扩展运算符,就是…,相当于浅拷贝,将一个数组展开成另一个数组,或将一个对象展开为另一个对象,例如:

let qing = [1,2];
let flow = [3,4];
let qingflow = [0,...qing,...flow,5];//[0,1,2,3,4,5]

展开对象

也是从左往右赋值,因此遇到相同属性时,值会被覆盖掉,例如:

let defaults = { food: "spicy", price: "$$", ambiance: "noisy" };
let search = { ...defaults, food: "rich" };//{ food: "rich", price: "$$", ambiance: "noisy" }

对象展开还会丢失对象的方法,所以不建议使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值