函式
函式型別
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
}
複製程式碼
可選引數和預設引數
- 在定義函式時,你的形參是多少個,你的實參就必須傳多少個,否則報錯
- 假設你定義了兩個形參 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
複製程式碼
- 你也可以給形參一個預設值(即預設初始化值得引數):
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")
複製程式碼