二、TS基本类型
类型声明
简介
类型声明是TS非常重要的特点
通过类型声明可以指定TS中的变量的类型(参数,形参)的类型
指定类型后,当为变量赋值的时候,TS的编译器会自动检查值是否符合类型声明,如果符合则赋值,否则报错
类型声明给遍量设置了类型,使得变量只能存储某种类型的值
语法:
let 变量: 类型
let 变量: 类型=值
function f(参数: 类型, 参数:类型): 类型{
//...
}
自动类型判断
TS拥有自动类型判断机制
当对变量的声明和赋值时同时进行的时候,TS编译器会自动判断变量的类型
所以当声明和赋值同时进行的时候,则可以省略掉变量的声明
类型
类型 | 例子 | 描述 |
---|---|---|
number | 1,222,-124 | 任意数字 |
string | ‘sing’,“hello”,‘123’,`hi` | 任意字符串 |
boolean | true,false | 布尔值 |
字面量 | 其本身 | 限制变量的值的就是该字面量的值 |
any | * | 任意类型 |
unknown | * | 类型安全的any |
void | 空值 | 没有值(或undefined) |
never | 没有值 | 不能是任何值 |
object | {name:“Alex”} | 任意的js对象 |
array | [0,1,2] | 任意js数组 |
tuple | [3,4,5] | 元组,TS新增类型,固定长度的数组(类似于python中的元组) |
enum | enum{A,B} | 枚举,TS新增类型 |
类型断言:
有些情况下,类型对于我们来说是很明确的,但是对于TS编译器却不是很清楚,此时可以通过类型断言来告诉编译器变量的类型
语法
①变量 as 类型
let e3:unknown
s=e3 as number
②<类型>变量
let e3:unknown
s=<number>e3
类型的别名
用于简化类型的使用
type otf= 1 | 2 | 3 | 4 | 5
let as:otf
typeof as == otf //true
相对于js中特别的类型
① 字面量
当字面量声明后,只能是赋值那个量,不能赋值另外的值
let b:10
let a=1 | 2 | 3 | 4 | 5
// 这里声明的值为10就只能是赋值10,如果重新赋值为其他值则会报错
② any
表示任意类型,可以赋值给任意的变量,会关闭自己和其他变量的类型转换
隐式any,不指定类型则会自动识别成any
let e2//这里的e2也是any类型
③ unknown
表示未知类型,实际上是一个安全的any类型
unknown类型的变量不能直接赋值给其他变量
let e3:unknown
e3='hello'
s=e3 //报错
④ void
表示空,以函数为例,void表示没有返回值或返回值为undefined的函数
function fn():void{
return undefined
}
⑤ never
表示不会有结果
//这里用来抛出错误
function fn2():never{
throw new Error('Error')
}
⑥Object
表示一个js对象
let a1 :object
可以指定对象内的属性
语法:{属性名:属性类型值,属性名:属性类型值}
属性名后面的?
,表示该属性是一个可选值
let a2:{name:string,age?:number}
// [propName:string]:any 表示任意类型的属性
let aa:{[propName:string]:any}
⑦数组
string[]表示字符串数组
let aaa:string[] //即数组内所有的元素都是string类型
另一种写法
let bbb:Array<string>
⑧元组
即固定长度的数组
语法[类型,类型,类型…]
let yz:[string,string]
// 表示元组长度为2,元组内的类型为string
⑨enum枚举
语法 enum 类名{ 属性,属性 }
enum Gender{
male,
famale
}
js中的数据类型
基本数据类型:
Undefined、Null、Boolean、Number、String,Symbol(es6中加入)
引用数据类型 :
Object、array、function