1. any類型
不希望類型檢查器對這些值進(jìn)行檢查而是直接讓它們通過編譯階段,可以使用 any類型來標(biāo)記這些變量放航。
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
let list: any[] = [1, true, "free"];
list[1] = 100;
2. object
object表示非原始類型淤年,也就是除number仰坦,string艇抠,boolean枣抱,symbol佩厚,null或undefined之外的類型。
Object類型的變量只是允許你給它賦任意值 - 但是卻不能夠在它上面調(diào)用任意的方法吆倦,即便它真的有這些方法听诸。(下面的代碼都已經(jīng)打印出來了‘b.join():5-abc’,但是依然報了錯)
any也允許你給它賦任意值 - 而且能夠在它上面調(diào)用任意的方法逼庞。
let a:any = [5, 'abc'];
console.log('a.toFixed():', a.join('-'))
let b:object = a;
console.log('b.toFixed():', b.join('-')) // Property 'join' does not exist on type 'object'.
// b = 4蛇更; // error:不能將4賦給object類型
a.push('88')
console.log('b a:', b, a) // b a: [5, "abc", "88"] [5, "abc", "88"]
b = [4]
console.log('b a:', b, a) // b a: [4] [5, "abc", "88"]
3. 枚舉enum
枚舉有點像數(shù)組,它有個元素編號赛糟,從0開始派任,用法又有點像js對象。
enum Color {Red, Green, Blue}
console.log(Color) // {0: "Red", 1: "Green", 2: "Blue", Red: 0, Green: 1, Blue: 2}
看到打印的值璧南,就明白了掌逛,它既可以通過編號獲取定義的值,也可以通過定義的值司倚,獲取編號豆混。
enum Color {Red = 1, Green}
enum Color {Red2 = 5, Green2}
console.log(Color)
// {1: "Red", 2: "Green", 5: "Red2", 6: "Green2", Red: 1, Green: 2, Red2: 5, Green2: 6}
可以重復(fù)聲明篓像,而且編號可以手動修改。
enum Color {Red = 1, Green = 6}
enum Color {Red2 = 5, Green2}
console.log(Color)
// {1: "Red", 5: "Red2", 6: "Green2", Red: 1, Green: 6, Red2: 5, Green2: 6}
手動聲明皿伺,有可能導(dǎo)致意料之外的錯誤员辩,Green被覆蓋了。
Green的下標(biāo)是6鸵鸥,Green2的下標(biāo)也是6奠滑,后執(zhí)行的把先執(zhí)行的覆蓋了。
4. 函數(shù)的返回類型:void never
5. 類型斷言
類型斷言并不能強(qiáng)制轉(zhuǎn)換妒穴,也不會進(jìn)行特殊的數(shù)據(jù)檢查和解構(gòu)宋税。 它沒有運行時的影響,只是在編譯階段起作用讼油。 TypeScript會假設(shè)你(程序員)杰赛,已經(jīng)進(jìn)行了必須的檢查。
語法矮台,其一是“尖括號”語法:
let someValue: any = 123;
let strLength: number = (<string>someValue).length;
console.log(strLength) // undefined
(不能強(qiáng)制轉(zhuǎn)換乏屯,number變量并沒有l(wèi)ength屬性)
另一個為as語法:(在.jsx文件里,只能用這種)
let someValue: any = "123";
let strLength: number = (someValue as string).length;
console.log(strLength) // 3