類型
boolean: 布爾類型;
array:數(shù)組類型;
string: 字符類型;
number:數(shù)字類型;
tuple:元組類型;
enum:枚舉類型;
any:動(dòng)態(tài)類型;
void:沒有類型;
null:null類型;
undefined:undefined類型;
never:用不存在的值的類型;
object:非原始類型
原始類型
number,string,boolean,symbol,null,undefined
類型詳述
number
和JavaScript一樣,TypeScript里的所有數(shù)字都是浮點(diǎn)數(shù)。這些浮點(diǎn)數(shù)的類型是 number。 除了支持十進(jìn)制和十六進(jìn)制字面量,TypeScript還支持ECMAScript 2015中引入的二進(jìn)制和八進(jìn)制字面量
let num1:number = 99
let num2:number = 0xf00d
let num3:number = 0b11
let num4:number = 0o74
Array
let arr:object[] = [{},{},{}]
let arr1:Array<object> =[{},{},{}]
元組類型
已知數(shù)量和類型的數(shù)組
let sun:[string,number, boolean];
sun = ["do",10,false] //yes
sun = [10,"age",false] //no
當(dāng)訪問(wèn)已知索引的元素,會(huì)得到一個(gè)確定的類型
console.log(sun[0].substring(1)) //ok
console.log(sun[1].substring(1)) //類型“number”上不存在屬性“substring”。
當(dāng)訪問(wèn)一個(gè)越界的元素,會(huì)通過(guò)聯(lián)合類型來(lái)表示
sun[3] = "hello" // ok 字符串可以賦值為 string|number中的一個(gè),編譯會(huì)報(bào)錯(cuò)
sun[4] = false // ok 字符串可以賦值為 string|number中的一個(gè),編譯會(huì)報(bào)錯(cuò)
console.log(sun[5].toString()) //官網(wǎng)說(shuō)可以但是實(shí)際操作不行
Any
為不清楚類型的變量指定一個(gè)類型,允許你在編譯時(shí)可選擇的包含或移除類型檢查,Object只允許你進(jìn)行賦值,而不允許你調(diào)用它的方法
let anything:any = 4
anything.ifItExists()
anything.toFixed()
let something :Object = 4
something.toFixed() //Property 'toFixed' does not exist on type 'Object'
Never
表示永不存在的類型,never類型是那些總是會(huì)拋出異?;蚋揪筒粫?huì)有返回值的函數(shù)表達(dá)式或箭頭函數(shù)表達(dá)式的返回值類型; 變量也可能是 never類型,當(dāng)它們被永不為真的類型保護(hù)所約束時(shí)。
never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never
function error(message:string): never {
throw new Error(message)
}
function fial() {
return error("fail")
}
function infiniteLoop():never {
while(true){
}
}
類型斷言
兩種方式:
- 尖括號(hào)
let str = "this is a string" let length:number = (<string> str).length - as關(guān)鍵字
let str = "this is a string" let length:number = (str as string).length