類型指定
let a:number //為a變量指定了類型為number
a=1
a='1' //會報錯因為'1'不為number類型 但是可以編譯成功 可以設(shè)置為不能編譯通過
let a1=0 //也會指定為number類型 TS會做類型判斷如果你初始值為number類型就指定了這個變量只能為number類型
除了number類型還有其他類型的我這里就不一一舉例了
這里解釋一下上圖boolean類型以下的類型
// 字面量
let b:10 //b指定了常量只能為10
let b=10 //不會報錯
let b=11 //報錯因為b只能為10
// 如果指定的類型為對象類型是否內(nèi)部的值是否可以改變呢
let b1={name:'孫悟空',age:20}
b1={name:'豬八戒',age:20} //name會報錯因為name你指定的值為孫悟空,但是你后面賦值為的是豬八戒,所以他就會給你報錯,并不會像js中的let 可以改變對象內(nèi)部的值
// 如果我們需要去改變內(nèi)部對象的值也可以做到就是不指定他具體的值而是給他一個類型 如
let b1={name:string,age:number}
// 這時候就可以指定類型的值在對象中
b1={name:'孫悟空',age:20}
b1={name:'豬八戒',age:20}
// 都是可以做到的了也不會報錯哦
// any類型
let c:any
// 他就可以是任意js類型不會報錯但是也不會有提示
c=1
c='1'
c='heello'
c=true
c=['1',1,true]
c={name:'孫悟空',age:20}
b1=c //這樣也是不會報錯的但是接下來的類型unknown就不能這樣做了
// unknown 類型
let d:unknown
d=1
d='1'
d='hello'
d=true
d=['1',1,true]
d={name:'孫悟空',age:20}
b1=d //報錯原因是不能將unknown類型賦值給一個對象類型 所以unknown類型是相對于any的一個安全類型 會被類型檢測合約束
總結(jié):any 是可以接受任何值奇钞,也可以給任何值賦值,unknown接收任何值并不能給任何變量賦值
// void 類型
// 為空或者undefined
let e:void
e=undefined //不報錯 募胃,其他的值就會報錯
e=unll //報錯
// 所以一般用來指定沒有返回值的函數(shù)類型 后面我會說到
// never 類型
let f:never
f=undefined //報錯不能將undefined賦值給never類型祥诽,所以就常常用它來表示報錯的err函數(shù)
function fn3(): never{
throw new Error("報錯了锥余!");
}
// object對象類型
let obj:object
obj={name:'孫悟空'}
obj={name:'孫悟空',age:18}
// 如果我們需要指定一個對象他必須有一個屬性那么我們的寫法就會寫成這樣去限制他必須有這個屬性
let obj2:{name:string,age?:number} //age?:number 那么age屬性就變成了一個可選屬性可以有也可以沒有
obj2={} //報錯 obj2定義了name必需屬性切類型為string饼煞,但是我們給他賦值了一個空對象所以報錯了
obj2={name:'孫悟空'} //不填age屬性也不會報錯
obj2={name:'豬八戒',age:18}
obj2={name:'豬八戒',age:18,sex:'男'} //報錯因為沒有sex這個屬性 那我們需要這樣去接收未知屬性應(yīng)該怎么辦呢源葫?
// 解決方法 就是利用any類型
let obj3:{name:string,[propName:string]:any}
// [propName:string]:any 是指定的名字為string 接收的類型為any
obj3={name:'孫悟空',age:18,sex:'男'}//可以無限接收參數(shù)
let arr:Array<number> //《語法: let 變量名:Array<接受參數(shù)類型>》
arr=[1,2,3,4,5,6]
arr=['hello','word'] //報錯不能將string 賦值給number
// tuple 元組 就是固定了數(shù)組的長度
let arr2:[number,string] //規(guī)定了長度為2的一個元組第一個類型為number第二個為string
arr2=[1,'1']
arr2=[1] //報錯 不能將類型“[number]”分配給類型“[number, string]”。只傳了 1 個元素砖瞧,但arr2需要 2 個息堂。
arr2=[1,'aaa',3] //報錯 不能將類型“[number, string, number]”分配給類型“[number, string]”。傳了 3 個元素块促,但目標(biāo)僅允許 2 個荣堰。
// 枚舉類型 一般用來對一些常用的量做儲存 就比如男女性別等
enum Name{
A='孫悟空',
B='豬八戒',
C='沙和尚'
}
let enm:{name:string,age?:18}
enm={name:'孫悟空'}
console.log(enm.name===Name.A);