typescript學習筆記——(一)基礎類型

前段時間公司項目使用了ts作類型限制,雖然沒有深刻使用,可是已經能感覺到ts的強大。遂將以前的學習筆記整理一遍以做複習。爲vue3.0打好基礎(大佬們別再學了,跟不上了-_-!!)。vue

你要知道的

TypeScript是JavaScript的超集,含了 JavaScript 的全部元素,能夠載入 JavaScript 代碼運行,並擴展了 JavaScript 的語法。
JavaScript是弱類型語言,何爲弱類型呢?簡單來講就是忽略類型的限制,一個變量能夠賦值爲任意類型的值。
TypeScript是強類型語言,與弱類型相反,也就是說一個變量聲明時指定了類型,那麼它就永遠是這個類型,只能賦這個類型的值(除非通過強制類型轉換)。
JavaScript是腳本語言,TypeScript是編譯語言,就是說若是想執行一個ts文件,那麼就要先將ts文件編譯成js文件再去執行。
使用TS的好處,從現階段來講,TS帶給項目的好處顯而易見,首先不少錯誤在編譯階段就會暴露出來。其次代碼有更好的可讀性和可維護性。node

準備

掌握如下幾個命令就能夠開始學習TS
全局安裝ts
npm i -g typescript
編譯ts文件,執行命令後,同目錄下會生成一個同名的js文件
tsc xxx.ts
執行
node xxx.jstypescript

基礎類型

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;
相關文章
相關標籤/搜索