1. 程式人生 > 實用技巧 >OpenResty原始碼編譯安裝 Linux

OpenResty原始碼編譯安裝 Linux

我們知道起初的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
}
const
obj: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'}]

出處