any+void+object+联合类型+类型断言+类型推断
//any类型
let str:any = 100
str ='hahahaha'
console.log(str)
//当一个数组中要存储多个数据,个数不确定,类型不确定,此时也可以使用any类型来定义数组
let arr:any[] = [22, "女", true]
console.log(arr)
//这种情况下没有错误的提示信息,编译成功了,在运行后会出错
//console.log(arr[0].split(''))
//void类型,在函数声明的时候,小括号的后面使用:void,代表的是改函数没有任何的返回值
function showMsg():void{
console.log('不要男妈妈')
//return
//return undefined
return null
}
//由于没有返回值,输出为undefined
console.log(showMsg())
//定义void类型的变量,可以接收一个undefined的值,但以以不是很大
let vd:void = undefined
console.log(vd)
console.log('----------------------------------------')
//object类型
//定义一个函数,参数是object类型,返回值也是object类型
function getObj(obj:object):object{
console.log(obj)
return {
name:'帅帅宝宝',
age: 23
}
}
console.log(getObj({name:'帅帅宝宝', sex:'男'}))
//console.log(getObj('123')) //错误
console.log(getObj(new String('123')))
console.log(getObj(String))
console.log('----------------------------------------')
//联合类型表示取值可以为多种类型中的一种
//需求1:定义一个函数得到一个数字或字符串值的字符串形式值
function getString(str:number|string):string{
return str.toString()
}
console.log(getString(123))
console.log(getString('1213'))
//需求2:定义一个函数得到一个数字或字符串的长度
//类型断言:告诉编译器,我知道自己是说明类型的,也知道自己在干什么
//类型断言的语法方式1:<类型>变量名
//类型断言的语法方式1:值 as 类型
function getlength(str:number|string):number{
//return str.toString().length
//如果str本身就是string类型,那么就不用调用toString()方法
if((<string>str).length){
//str.length存在吗?如果存在就说明str是string类型的
//return (<string>str).length
return (str as string).length
}
else{
//此时说明str是number类型的
return str.toString().length
}
}
console.log(getlength(12345))
console.log(getlength('0123456'))
//类型推断:TS会在没有明确的指定类型的时候推测出一个类型
//1. 定义变量时赋值了, 推断为对应的类型. 2. 定义变量时没有赋值, 推断为any类型
let txt = 100 //number类型
console.log(txt)
let txt2; //any类型
txt2 = 100
txt2 ='heihei'
console.log(txt2)