TypeScript的基本数据类型和引用数据类型

ES6的数据类型

基本数据类型

  • Boolean
  • Number
  • String
  • Symbol
  • undefined
  • null

引用数据类型

  • Object
    • Array
    • Date
    • Function
    • ……

TypeScript的数据类型

TypeScript的数据类型在ES6的基础上添加了以下数据类型

  • void
  • any
  • never
  • 元组
  • 枚举
  • 高级类型

类型注解

相当于强类型语言中的类型声明,起到对变量的约束作用
在变量或函数后面加一个冒号,再加上类型名称
语法:(变量/函数):type

基本数据类型注解

在ts中给一个变量声明一个类型后,其值必须是该类型的值,否则在编译时会报错

number类型

let num:number;
num="hello world";

在这里插入图片描述
当给一个number类型的变量赋值为字符串,在编译时会给出错误。当把其值改为number类型时,可以成功编译
在这里插入图片描述

引用数据类型注解

数组

在ts中给一个变量声明为一个数组需要先指定数组中元素的类型,指定元素的数据类型后,元素的值必须是指定类型的值。
再指定元素的数据类型之后在使用[]指定该变量为一个数组

let num:number[]=[12,43];

如果使用Array指定一个变量为一个数组

let num:Array<number> = [12,43];

如果为数组元素指定多个类型

let num:Array<number| string> = [12,43];

表明数组的元素可以是number类型也可以是string类型,可以是纯number类型,可以是纯string类型可以是number和string的混合

函数

在给函数类型注解时,可以给函数的参数指定类型,也可以给函数的返回值指定类型
给函数的参数指定类型

let add=(x:number,y:number)=>{
}

给函数的返回值指定类型时与之前的写法不同

let add:(x:number,y:number)=>number
add=(a,b)=>a+b

如果不使用箭头函数

function add(x:number,y:number):number{
	return x+y;
}

对象

let obj:Object={};

这种方式声明类型只能声明变量的类型

let obj:{name:string,age:number}={name:"agf",age:12}

这种方式不仅可以声明变量的类型还可以声明对象属性的类型

void

表示没有任何返回值的类型,比如没有返回值的函数,这里的返回值是指使用return返回

let an = ()=>{}

any

any类型表示可以是任何类型,可以给变量赋值任何值

let x;//默认为any类型

如果将变量定义为any类型,与js没有区别,也就没有必要使用ts因此不推荐使用

never

表示永远不会有返回值的类型
一种情况是一个函数抛出抛出一个异常,函数永远不会有返回值

let error =()=>{
	throw new Error("error")
}

另一种是死循环,函数永远不会执行完毕,永远不会有返回值

let endless=()=>{
	while(true){}
}

never与void的区别

void是指函数执行完毕后没有返回值并且是指函数不使用return返回,函数在没有使用return返回时,可以返回undefined的。
never是指在函数能够执行的情况下函数没有执行完毕或者函数不能执行。

枚举类型

一组具有名字的常量集合

//声明枚举
//数字枚举
枚举的值与枚举名之间存在映射关系,我们可以通过枚举值获取枚举名
enum Role{
	Reporter,
	Developer,
	Owner
}
//获取枚举成员
console.log(Role.Reporter) //0
//自定义枚举成员的值
enum Ane{
	Reporter=1,
	Developer,
	Owner
}
//后面的枚举成员的值会依次增加
console.log(Ane.Developer)//2
//字符串枚举
enum Message{
	Success="成功",
	Fail="失败"
}
//异构枚举
enum Answer{
	N,
	Y="yes"
}

枚举成员的值是只读类型,定义之后不能修改

枚举成员的类型

  1. 常量枚举成员
    常量枚举成员的值,在编译阶段被计算出来
  2. computed
    需要被计算的枚举成员,通常是函数表达式,不会再编译阶段被计算,会被保留到执行阶段,computed的枚举成员必须有初始值否则会报错。

常量枚举

用const声明的枚举会在编译阶段被移除
不需要一个对象而需要一个对象的值的时候就可以使用常量枚举,减少编译阶段的代码

const enume Month{
	Jan,
	Feb
}

枚举类型

在某些情况下,枚举和枚举成员都可以作为一种单独的类型存在。
第一种情况,枚举成员没有初始值
枚举类型的变量的值是数值类型

enum E {a,b}
let e : E = 3

第二种情况,所有的成员都是数字枚举

enum F {a=0,b=1}
let f : F = 3 // 枚举类型变量的值可以超出枚举成员的定义

第三种情况,所有成员都是字符串枚举
注意点:

  • 两种不同的枚举类型不可以比较
  • 字符串枚举类型变量的值只能是枚举成员的类型
enum G {a="apple", b="banana"}
let g1 : G = G.a //可以是 G.a 或 G.b
let g2 : G.a = G.a //只能是G.a

类型推断

  1. 如果在声明变量时没有规定类型,TS将自行对变量进行推断
let num = 100;
num="Mr.Lee"

在这里插入图片描述
根据以上情况我们可以认为,当把100赋值给num时,num的类型就已经确定为number类型,之后就不能赋值为其他类型,当我们强行把字符串"Mr.Lee"赋值给num时就会报错
2. 在声明变量时并没有赋值

let other
other = 100;
other = "Mr.Lee"

在这里插入图片描述
根据以上情况,我们可以认为,当我们在声明变量并没有赋值时,TS会推断为any类型

类型断言

  1. 在处理联合类型的值时,我们可能需要判断类型来做响应处理
    我们想要获取一个值的长度
function len(info:string|number){
	if(info.length){
	}
}

在这里插入图片描述
这种方式需要注解的两种类型都具备length属性才会通过,此时该变量的string类型有该属性,number没有出现报错,要想不报错,那么就需要类型断言

类型断言的三种方式

as

function len(info:string|number){
	if((info as string).length){
		return (info as string).length
	}else{
		return info.toString().length
	}
}

在这里插入图片描述
这种方法可以通过编译。以上代码的意思为,TS首先将info认为是string类型,去调用length属性,如果能够调用,就返回length的值,如果不能调用,就使用toString()转换为字符串在调用length属性

let  name: string  =  '';
// 断言成any类型
<any>name

const

const把一个变量的类型断言为一个不可变类型

let name = '';

// 断言成字符串字面量类型
name as const;

!

!类型断言的作用是把类型中的undefined和null类型排除掉

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值