TypeScript中的基本类型
TS变量声明时指定类型
-
通过类型声明可以指定TS中变量(参数、形参)的类型,(类型使用小写),使得变量只能存储某种类型的值
-
类型
类型 例子 描述 number 1, -33, 2.5 任意数字 string ‘hi’, “hi”, hi
任意字符串 boolean true、false 布尔值true或false 字面量 其本身 限制变量的值就是该字面量的值 any * 任意类型 unknown * 类型安全的any void 空值(undefined) 没有值(或undefined) never 没有值 不能是任何值 object {name:‘孙悟空’} 任意的JS对象 array [1,2,3] 任意JS数组 tuple [4,5] 元素,TS新增类型,固定长度数组 enum enum{A, B} 枚举,TS中新增类型 -
基本语法:
let 变量: 类型;//先声明再赋值
let 变量:类型 = 值; //同时声明和赋值
let 变量=值;//声明和赋值时同时进行的,可以省略掉类型声明,默认为值的类型
function fn(参数:类型,参数:类型) :类型 {}let name:stringname='huge' //name=123 //提示错误let age:number = 123 // let age=123//结果age都是设定为number类型
-
字面量:
-
直接使用字面量进行类型声明
let a: 10; // 变量a就等于10,类似const定义变量,不可以赋其他值
-
可以使用 | 来连接多个类型(联合类型)
let b: “man” | “women”; //变量b 可以是这个两个值其中一个
b = “man”
b = “women”let c: boolean | string ;//变量c 可以是布尔类型,亦可以是字符串类型
c = true
c = ‘hello’
-
-
any类型:
- any表示所有类型都可以使用,如果声明变量不指定类型,默认为any类型
let d:any
d = 123
d = true
d = “abcd”let e //变量不指定类型,默认为any类型
e = 123
e = true
e = “abcd”- any类型的变量可以被赋值给其他类型的变量
let a:string
let b:any = 123
a = b //此时a的类型就变成了any
a= true //如果再将其他类型的赋值给a, 是不允许的,a还是只能接受string类型 -
unknown类型:
- 表示未知类型的值,unknown类型的变量,不能直接赋值给其他变量
let e:unknown
e = 10 / e = “hello” /… 变量e可以接受任何类型的值let a:number = 10
e = ‘hello’
a = e (报错) //不能直接赋值if(typeof e === ‘number’) a = e //先判断类型相同再赋值
类型断言,确定了e的类型是和a的类型一致,才能赋值-
语法:
- 变量 as 类型
- < 类型 > 变量
a = e as number
a = < number > e -
void 类型
- void 用来表示空,以函数为例,就表示没有返回值的函数
let a:void
a = 123 [ 错误 ]
a = “abc” [ 错误 ]
a = undefined [ 正确 ]function fn() {} // 没有设置类型,函数默认void,既可以有返回值又可以没有返回值function fn2():void {} //指定了void类型,则函数不能有返回值
-
never 类型
- never表示永远不会有返回结果,undefined
-
object 类型
-
如果想让变量的类型为object
let a :{}
a = {name:‘胡歌’}
a = {age:10,name:‘胡歌’} -
规定变量具体内容
let b:{name:string, age:number} // 变量接受的赋值必须和规定的内容一模一样b={name:'胡歌', age:20} //正确b={name:'胡歌'} //报错b={name:'胡歌', age:20, love:'car'}//报错let c:{name:string, age?:number} //属性名后加了问号,则表示属性可选,不是必须let d:{name:string, [propName:string]:any} // [propName:string]:any} 表示可以添加任意类型的属性d={name:"胡歌", love:"钓鱼" , age:10} // 必须存在name属性,其他属性可以随便添加
-
设置函数结构的类型声明:
语法: (形参:类型,形参:类型,…) => 返回值类型
let a: (num:number,num2:number)=>numbera= function(num:number,num2:number):number{return num+num2}
-
-
array 类型
- 数组的类型声明
- 类型[]
- Array<类型>
let a: string[]a=["a","b","c"]let b: Array<number>b=[1,2,3,4]let c:Array<any>c=[1,2,"a","b"]
-
tuple 元组
- 元组就是固定类型的数组
//语法: [类型,类型,...]let a: [string , number ]a =["a",123] //正确a =["a"] //错误a =["a",123,"b"] //错误
-
enum 枚举
- 将可能的结构都列举出来,适用与固定几个值,例如性别
//1. 声明定义枚举类型enum Sex{man,women}let student:{name:string , sex:Sex }student={name:"胡歌", sex:Sex.man}//判断学生性别console.log(student.sex===Sex.man)
-
补充
- &
let j :{name:string} & {age:number} //表示j必须存在这两个属性,不能少,不能多j={name:'胡歌',age:18} //正确
- 类型别名
let num: 1 | 2 | 3 | 4 | 5//如果还有很多变量也需要num这样指定类型type numRule = 1 | 2 | 3 | 4 | 5let a:numRulelet b:numRule