TypeScript 學習(四)

挖坑埋神經病發表於2018-10-18

倉庫地址:github.com/YaliixxG/Ty…

函式

函式型別

JS 兩種函式形式(有名和匿名)

function add(x, y) {
  return x + y
}

let myAdd = function(x, y) {
  return x + y
}
複製程式碼

為函式定義型別

下面為上面的函式定義型別:

function add(number: x, number: y): number {
  return x + y
}

let myAdd = function(number: x, number: y): number {
  return x + y
}
複製程式碼

函式型別包含兩部分:引數型別和返回值型別。

書寫完整型別

完整的函式型別如下:

let myAdd:(x:number,y:number) = number =>function(x:number,y:number):number{
    return x + y
}
複製程式碼

推斷型別

其實如果你在賦值語句的一邊指定了型別但是另一邊沒有型別的話,TypeScripts 會自動識別出型別:

let myAdd:(a:number,b:number) = number =>function(x,y){
return x + y
}
複製程式碼

可選引數和預設引數

  1. 在定義函式時,你的形參是多少個,你的實參就必須傳多少個,否則報錯
  2. 假設你定義了兩個形參 x,y,但是 y 這個形參可能你使用這個函式時,這個引數暫時沒有實參,則用?來定義這個形參:
function buildName(firstName: string, lastName?: string) {
  if (lastName) return firstName + " " + lastName
  else return firstName
}

let result1 = buildName("Bob") // works correctly now
let result2 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result3 = buildName("Bob", "Adams") // ah, just right
複製程式碼
  1. 你也可以給形參一個預設值(即預設初始化值得引數):
function buildName(firstName: string, lastName = "Smith") {
  return firstName + " " + lastName
}

let result1 = buildName("Bob") // works correctly now, returns "Bob Smith"
let result2 = buildName("Bob", undefined) // still works, also returns "Bob Smith"
let result3 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result4 = buildName("Bob", "Adams") // ah, just right
複製程式碼

一般預設值引數寫在必須引數的後面,如果要寫在必須引數的前面的話,則你傳入形參時,預設值引數如果沒有值,你就必須傳一個 undefined,否則報錯:

function buildName(firstName = "Will", lastName: string) {
  return firstName + " " + lastName
}

let result1 = buildName("Bob") // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result3 = buildName("Bob", "Adams") // okay and returns "Bob Adams"
let result4 = buildName(undefined, "Adams") // okay and returns "Will Adams"
複製程式碼

剩餘引數

function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + "" + restOfName.join("")
}

let emplyeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie")
複製程式碼

記住: 關於this和過載的部分,後面再補上,今天有點疲憊 = =

相關文章