(小白入坑惑淳,不喜勿噴)
任意類型 any
ts的基本類型口渔,可以復制為任意類型
let a:any
a = 'hello' //pass
a = 123 // pass
a = [] // pass
字符串 string
ts的基本類型,當一個變量的類型定義為字符串的時候官辽,他的值只能是字符串蛹磺,若賦值了其他類型的值粟瞬,則ts就會報錯
let name: string
name = "xiaoming" //pass
name = 123 //報錯同仆,類型錯誤
數(shù)字 number
ts的基本類型,當一個變量的類型定義為數(shù)字的時候裙品,他的值只能是數(shù)字俗批,若賦值了其他類型的值,則ts就會報錯
let age: number
age = 28 //pass
age = 'hello' //報錯市怎,類型錯誤
布爾 boolean
ts的基本類型岁忘,當一個變量的類型定義為布爾的時候,他的值只能是布爾区匠,若賦值了其他類型的值干像,則ts就會報錯
let hasMoney:boolean
hasMoney = false //pass
hasMoney = 'has' //報錯帅腌,類型錯誤
null、undefined
ts的基本類型麻汰,null和undefined類型的變量速客,值只能是null和undefined
let a:null = null
let b:undefined = null
void
ts的基礎類型,非嚴格模式下(tsconfig.compilerOptions.strict = true)五鲫,值可以是null和undefined溺职,
嚴格模式下,void類型的值只能是undefined
let a:void
a=null //嚴格模式下會報錯
a=undefined
never
never 類型表示的是那些永不存在的值的類型位喂,一般作為絕對不會有返回值的函數(shù)的返回類型,例如函數(shù)內(nèi)部報錯或者函數(shù)內(nèi)部無限循環(huán)等
//函數(shù)拋異常
function errortest():never = ()=>{
throw '拋出異常七冲,函數(shù)走不到最后规婆,不會返回'
}
// 函數(shù)不會走到終點
function infiniteLoop(): never {
while (true) {
//函數(shù)不會走到最后癞埠,不會返回
}
}
枚舉
枚舉類型是ts的一個特殊類型,可以給一些值賦予比較容易理解的名字,像數(shù)組聋呢,也像對象
默認情況下,元素成員的值從0開始苗踪,依次累加
enum Num { frist, second, third }
console.log(Num) //{0: "frist", 1: "second", 2: "third", frist: 0, second: 1, third: 2}
console.log(Num[0]) // frist
console.log(Num.frist) // 0
也可以修改成員值
enum Num2 { frist = 1, second = 3, third = 1 }
console.log(Num2) //{1: "third", 3: "second", frist: 1, second: 3, third: 1}
console.log(Num2[1]) // third
console.log(Num2.third) // 1
成員下標也可以不是數(shù)字
enum Name { one = 'xiaomin', two = 'xiaohong', three = 'xiaogang' }
console.log(Name) //{one: "xiaomin", two: "xiaohong", three: "xiaogang"}
console.log(Name.one) //xiaomin
console.log(Name['xiaomin']) // undefined
const a: Num = Num.frist
console.log(a) //0
tuple元組
元組類型是表示一個已知長度和每一個元素類型的類型
let a = [string,number]
a = ['xiaomin',28]
a = [2,28] //報錯
TyeScript 3.1 版本之后,如果訪問或改變元組長度之外的元素削锰,也會報錯
console.log(a[2]) //報錯
a[2] = 3 //報錯
數(shù)組 Array|[]
ts的基本類型通铲,數(shù)組的類型定義方式有兩種:Array<type>
|type[]
let arr: string[] //或者 arr:Array<string>
arr = ['1', '2'] //pass
arr = [1,2] //報錯,類型錯誤
console.log(arr);
對象 object
ts基本類型器贩,可賦值為任意對象類型
let a:object
a = {a:1} //pass
a = {b:2} //pass
a = 'hello' //拋錯
函數(shù)類型
ts允許我們給函數(shù)定義類型
可以顯示的給函數(shù)指定類型
type AddFunc = (num1:number,num2:number)=>number
const addfunc:AddFunc = (num1,num2)=> num1+num2
也可以隱士的給函數(shù)指定類型
function addfunc(num1:number,num2:number):number {
return num1 + num2
}
類型斷言
有些情況下颅夺,ts無法識別當前變量的類型但是作為開發(fā)者本身是可以確定該類型的,為了解決ts無法識別而報錯的問題蛹稍,ts提供了類型斷言的方式,類型斷言有兩種方式 val as string
|<string>val
ps jsx語法中只支持
val as string
這種方式
function test(val:string|number){
//ts無法識別val當前到底是string還是number吧黄,所以如果直接使用string或number的屬性,會報錯
val.slice(0) //報錯
val.toFixed(1)// 報錯
//給val斷言類型之后就不會報錯
(val as string).slice(0)
// 或者 (val as number).toFixed(1)
}