前段時間公司項目使用了ts作類型限制,雖然沒有深刻使用,可是已經能感覺到ts的強大。遂將以前的學習筆記整理一遍以做複習。爲vue3.0打好基礎(大佬們別再學了,跟不上了-_-!!)。vue
TypeScript是JavaScript的超集,含了 JavaScript 的全部元素,能夠載入 JavaScript 代碼運行,並擴展了 JavaScript 的語法。
JavaScript是弱類型語言,何爲弱類型呢?簡單來講就是忽略類型的限制,一個變量能夠賦值爲任意類型的值。
TypeScript是強類型語言,與弱類型相反,也就是說一個變量聲明時指定了類型,那麼它就永遠是這個類型,只能賦這個類型的值(除非通過強制類型轉換)。
JavaScript是腳本語言,TypeScript是編譯語言,就是說若是想執行一個ts文件,那麼就要先將ts文件編譯成js文件再去執行。
使用TS的好處,從現階段來講,TS帶給項目的好處顯而易見,首先不少錯誤在編譯階段就會暴露出來。其次代碼有更好的可讀性和可維護性。node
掌握如下幾個命令就能夠開始學習TS
全局安裝tsnpm i -g typescript
編譯ts文件,執行命令後,同目錄下會生成一個同名的js文件tsc xxx.ts
執行node xxx.js
typescript
JavaScript的全部類型TS都支持,而且TS還擴展瞭如枚舉等類型。變量的聲明方式與JavaScript無異,只是加入了類型註解。
幾種常見的類型:npm
let flag: boolean = false // boolean let num: number = 20 // number let name: string = 'bob' // string let list: number[] = [1, 2, 3, 4] // Array let obj: Object = {} // Object
元組類型:
元組就是已知長度和類型的數組數組
let arr: [string,number] arr = ['halo', 10] arr = [10, 'halo'] // error 賦值的順序要與聲明時的順序一致,不然會報錯 arr[2] = 'wode' // 如此越界賦值,在3.1及以上版本會報錯
枚舉類型:函數
enum Color1 { Red, // 索引默認從0,能夠修改 Green, Blue } enum Color2 { Red = 1, // 索引默認從0,能夠修改 Green = 2, Blue = 4 } let c1: Color1 = Color1.Blue let colorName: string = Color2[2] // 反查 Green
any任意類型:
當不肯定類型時可使用any,表示任意類型學習
let notSure1: any = 4 let notSure2: any = 'str' // any 類型的變了能夠賦值成任意類型 notSure1 = 'maybe a string inttead' notSure2 = false // any 類型的數組,也能夠賦值爲任意類型 let notSureList: any[] = [1, true, 'dd'] notSureList[1] = 100
須要注意的是,類型註解爲any表明任意類型,可是若是不寫類型注意,TS會進行類型推斷,推斷爲一個類型,此時該變量是有肯定類型的不可隨意賦值。如:this
let notSure3 = 4 // 不寫類型,會根據賦值進行推斷,類型爲number notSure3 = 'to string' // error
void類型:
void 表示沒有任何類型code
// 一個沒有返回值的函數 function fn(): void { console.log('this fnc has no return'); } // 對於變量來講,意義不大 let unsable: void = null // 還能夠賦值爲undefined,賦值其餘會報錯
null & undefined:
賦值成這兩種類型沒有實際意義索引
let num: number = 5 num = null // 正常編譯不會報錯,可是使用 tsc xx.ts --strictNullChecks嚴格模式編譯會報錯 // 使用聯合類型,聯合類型表示或的關係 let num2: number | null = 3 num2 = null
never類型:
表示不存在的類型,是全部類型的子類型。never能夠賦值給其餘類型,其餘類型不能賦值給never。
let test1: number = 123 let test2: never test1 = test2 // test2=test1 // error function error(message: string): never { throw new Error(message) } function fail() { return error('some failed') }
有時能夠明確指定一個變量爲某種類型,類型斷言兩種常見方式
let someVal: any = 'this is a string' let strLen1: number = (<string>someVal).length let strLen2: number = (someVal as string).length
更推薦使用第二種方式。
let o = { a1: 'foo', b1: 12, c1: 'bar' } let { a1, b1 }: { a1: string, b1: number } = o;