TypeScript 函式型別

admin發表於2018-08-11

TypeScript核心原則之一是對資料具有的結構進行型別檢查。

函式也不例外,首先看一段程式碼例項:

[typescript] 純文字檢視 複製程式碼
function antzone(webName: string, age: number): string {
  return webName+"已經成立"+age+"年了";
}

以函式宣告方式建立函式,括號中規定了函式引數的型別;最後一個冒號後面規定函式返回值型別。

[typescript] 純文字檢視 複製程式碼
let antzone = function(webName: string, age: number): string {
  return webName+"已經成立"+age+"年了";
}

以表示式方式建立函式,引數型別和返回值型別的規定與上面是一樣的。

上面方式其實是簡寫形式,如同以下程式碼:

[typescript] 純文字檢視 複製程式碼
let str="螞蟻部落";

變數str的型別是由它的值推斷出來的,完整的寫法如下:

[typescript] 純文字檢視 複製程式碼
let str:string="螞蟻部落";

同樣的道理,antzone也可以顯式給出型別,程式碼例項如下:

[typescript] 純文字檢視 複製程式碼
let antzone: (webName:string, age:number) => string

小括號中規定引數的型別,箭頭後面是函式返回值型別;完整程式碼如下:

[typescript] 純文字檢視 複製程式碼
let antzone: (webName:string, age:number) => string=
    function(webName: string, age: number): string {
      return webName+"已經成立"+age+"年了";
    }

特別說明:

(1).函式的型別必須是完整的,即便函式沒有返回值,也要顯式規定void:

[typescript] 純文字檢視 複製程式碼
let antzone: (webName:string, age:number) => void

(2).函式型別中引數的名稱沒必要和函式資料中的引數名稱相同,只要型別匹配即可:

[typescript] 純文字檢視 複製程式碼
let antzone: (webName:string, age:number) => string=
    function(name: string, webAge: number): string {
      return name+"已經成立"+webAge+"年了";
    }

函式型別推斷:

[typescript] 純文字檢視 複製程式碼
let antzone = function(webName: string, age: number): string {
  return webName+"已經成立"+age+"年了";
}

上面程式碼可以由右邊推斷出antzone的型別為:

[typescript] 純文字檢視 複製程式碼
(webName:string, age:number) => string

再來看一段程式碼例項:

[typescript] 純文字檢視 複製程式碼
let antzone: (webName:string, age:number) => string=
    function(name, webAge){
      return name+"已經成立"+webAge+"年了";
    }

由左到右推斷型別。

相關文章