类型的声明
直接赋予变量类型
let str:string ='hellow'
let str1 = 100
str1 = '字符串'
间接赋予变量类型
let str1 = 100
str1 = '字符串'
字面量进行类型声明
let num:10|9//只能是6或者是10,类似于常量
方法赋予变量
function add(params1:number,params2?:number):number {
return params1+params2
}
let num =add(1,2)
num =''//报错! 方法限制了返回类型为number
箭头函数
let fun:(a:number,b:number) =>number = fun1(n1:number,n2:number)=>a1*a2
fun = (a,b) =>a*b
不同声明方式
let fun1:(a:number,b:number) =>number = function(n1:number,n2:number){return n1*n2 }
let fun2:(a:number,b:number) =>number = (n1:number,n2:number)=>n1*n2
对象声明
- 对象声明
当对象声明的时候就固化了对象的属性,和属性类型,必须传入属性,
如果想让属性可有可无添加问号,
如果可以随意添加对象属性,需要使用[propName:string:any]
let obj:{a:number,b?:string,[propName:string:any]}
={a:1,b:'str',c:'123',d:123}
//问号,非必须参数
let userinfo:{name:string}
userinfo ={name:'123'}
console.log(userinfo.name)
数组声明
let arr:number[] =[1,2,6,5,8,9]
元组 (限制数组数量,每一位的类型)
let arr:[string,number,boolean] =['ss',100,true]
let arr2:[number,string][] =[[1,'a'],[2,'b']]
枚举 有点像对象
enum nums{
num1=0,
num2
}
console.log(nums.num1 , nums.num2)// 0 1
别名
//字变量
type myvar =1| 2| 3| 4;
let a:myvar
a = 2
a = 5 //5 不在上面的里面,那么就报错
// 类型
type mytype = string|number|boolean
function demo(a:mytype,b:mytype,c:mytype){}
// 方法
type fun=(a:number,b:number)=>number
let fun1:fun=(a:number,b:number)=>a*b
//对象
type obj={name:string,age:number}
let person:obj ={name:'csdn:weixin_44000173的博客',age:24}
类型
基础类型
- number(int ,float,double,八进制,十进制,十六进制)
- boolean(true,false,20>5)
- string (‘’,“”,``${123}`)
- 数组
let arr:str[] =[]
,let arr1:Array<number> =[]
- 对象 声明的时候固化了属性的类型,也不能添加属性
特殊类型
- null,undefined,
let aa:null = null
只能等于null(undifined) - any 任意类型,声明后可以赋值任意类型//不建议使用
- unknown 一个安全的any,个人理解:除了unknown类型或者any类型可以等于unknown类型,其他类型不行。
let unknown:unknown; let string:string='字符串'; let any:any let a:unknown any = a string = a//报错。 unknown = a
4.void 表示无, 没有返回值
5.never 永远没有返回值,返回报错
联合类型
1.使用或运算
let str:string|number|null
let arr:(string|number|boolean)[]=[1,'stt']
- 使用与运算
//对象必须有两个参数
let obj:{name:string}&{age:number}
- 元组
4.字变量
5.枚举enum
类型断言和缩小 as/as const
类型缩小和as断言
function fun(n:string|number){
// 类型“number”上不存在属性“length”
let len:number
//类型缩小
if(typeof n =='string'){
len = n.length
}
//强制转换
len = (<string>n).length
//断言,告知系统这个参数是什么类型
len = (n as string).length
console.log(len)
//赋值解构
function fun (){
let str:string='ssss'
let fun1 = (a:string,b:number):number=>a+b
return[str,fun1]
}
let [str,num] = fun() as [string,(a:number,b:number)=>number]
}
as conset,变为只读属性,常量,数组对象等都不能够改变值
let arr = ['ww',14] as const
console.log(arr[0])// ww
arr[0] ='a' //只读属性 不能更改该
let arr2 =<const>['www',15]
arr2[0] ='aa' //只读属性
非空断言,断言属性不能为空 使用感叹号!
let el =document.querySelector('.box')!