OpenResty原始碼編譯安裝 Linux
阿新 • • 發佈:2020-12-13
我們知道起初的JavaScript有些許詬病,比如下面程式碼:
const a = { width: 10, height: 20 } console.log(a.heigth * a.width) // NaN
拼寫錯誤導致a.heigth為undefined,所以結果為NaN,可是我們根本沒有定義heigth屬性,從何而來的為undefined呢?我們希望的是提示heigth為不存在。
還比如:
if("" == 0) { console.log(1) // 1 }
我們很難理解"" == 0為true
綜上所述,我們需要一個靜態檢測的功能,這樣可以幫助在編寫程式碼的時候提示出錯,而不是在執行程式碼時提示錯誤。
而Typescript則提供的是靜態型別檢測功能,主要是檢測資料的型別是否符合規定的型別。
可以分為顯示和非顯示規定資料型別:
1.1 非顯示的規定a為string型別,所以後面賦值就報錯了。
let a = "s" a = 10 // Type 'number' is not assignable to type 'string'
非顯示的規定a為string型別,所以後面賦值就報錯了。
2.1 顯示的規定資料型別可以使用關鍵字interface,如下程式碼:
interface Car { name: string, speed: number } let www:Car = { name:'www', speed: 10 }
屬性值一個都不能少,不然會報錯。
2.2 unions: 顯示的規定資料型別還可以使用type關鍵字,程式碼如下:
type a = "x" | "y"| "z" | number let b:a = "z" // 不報錯 b = 10 // 不報錯 b = "zz" // 報錯
2.3 generics(泛型):我們知道interface可以顯示的規定資料型別,如果我們想規定的資料型別是一個變數,可以在使用時規定為任何的型別,這就是泛型。演示程式碼如下:
interface A<type> { name: type } constobj:A<number> = { name: 10 } const OBJ:A<string> = { name: "abc" }
除此之外還可以通過泛型來規定陣列中儲存的資料型別,如下程式碼:
type isStringArr = Array<string> type isObjName = Array<{name:string}> let arr:isStringArr = ['a','b'] let objName:isObjName = [{name: 'xx'}]