TS學習之函數


定義函數類型(規定函數參數及函數返回值的類型,若函數沒有返回值,則返回類型為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' ]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM