TS學習之函數
阿新 • • 發佈:2017-10-27
arguments first str rst fun 函數 join last 實現
定義函數類型(規定函數參數及函數返回值的類型,若函數沒有返回值,則返回類型為null)
function add(x: number, y: number): number { return x + y }
推斷類型(ts自動識別類型(按上下文歸類))
function add(x: number, y: number) { return x + y } //ts會自動識別出返回類型為number
可選參數,默認參數,剩余參數
- 可選參數(參數名旁使用
?
實現可選參數的功能,可選參數放在必填參數之後)
function buildName(firstName: string, lastName?: string) {if (lastName) return firstName + " " + lastName; else return firstName; } let result1 = buildName("Bob"); // Bob let result3 = buildName("Bob", "Adams"); // Bob Adams
- 默認參數(默認參數可傳值也可不傳,一般默認參數在必須參數之後,但也可以定義在默認參數之前,但此時必須明確傳入undefined以獲取默認值)
function buildName(firstName: string, lastName: string = "Smith") {return firstName + " " + lastName; } let result1 = buildName("Bob"); // Bob Smith let result3 = buildName("Bob", "Adams"); // Bob Adams
function buildName(firstName: string = "Mr", lastName: string ) { return firstName + " " + lastName; } let result1 = buildName("Bob","Adams"); // Bob Adams let result2 = buildName("Bob"); //error: Expected 2 arguments, but got 1. let result3 = buildName(undefined,"Smith") //Mr Smith
- 剩余參數(當參數個數不確定時)
function buildName(firstName: string, ...restOfName: string[]) { return firstName + " " + restOfName.join(" "); } let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie"); console.log(employeeName) //Joseph Samuel Lucas MacKinzie
this和箭頭函數(傳統函數的this作用域是在函數調用時確定,但箭頭函數的this作用域在創建時就已經確定)
- 傳統函數
let myobj = { person:["Bob","Fred","Smith"], myFn:function(){ return this.person } } let test = myobj.myFn; console.log(test()) //undefined
- 箭頭函數
let myobj = { person: ["Bob", "Fred", "Smith"], myFn: function () { return () => { return this.person } } } let test = myobj.myFn(); console.log(test()) //[ ‘Bob‘, ‘Fred‘, ‘Smith‘ ]
TS學習之函數