一、typescript 中定義函數的方法
函數聲明法
function test1(): string {return '返回類型為string'
}function test2(): void {console.log('沒有返回值的方法')
}
函數表達式/匿名函數
const test3 = function(): number {return 1
}
二、typescript 中 函數參數寫法
1、typescript 中定義函數傳參
函數聲明
function getInfo(name: string, age: number): string {// 傳參name為string類型、age為number類型,返回類型為stringreturn `${name} - ${age}`
}getInfo('zhangsan', 20) // zhangsan - 20
函數表達式/匿名函數
const getInfo2 = function(name: string, age: number): string {// 傳參name為string類型、age為number類型,返回類型為stringreturn `${name} - ${age}`
}getInfo2('zhangsan', 18) // zhangsan - 18
2、可選參數
在 es5 中,方法的形參和實參個數可以不一樣;但是在 ts 中必須一樣,如果不一樣就需要配置可選參數。
ts 中 通過【 形參?: 數據類型 】形式定義可選參數,代表該參數在方法調用時可以不傳入。
注意:可選參數必須到參數的最后面,否則ts編譯時會報錯
function getInfo(name: string, age?: number): string {if (age) {return `${name} - ${age}`} else {return `${name} - 年齡未定義`}
}getInfo('zhangsan') // zhangsan - 年齡未定義
getInfo('zhangsan', 20) // zhangsan - 20
3、默認參數
創建方法時,可以給參數指定默認值。
function getInfo(name: string, age: number=18): string {return `${name} - ${age}`
}getInfo('zhangsan') // zhangsan - 18
getInfo('zhangsan', 20) // zhangsan - 20
4、剩余參數
通過 es6 的 三點運算符,接受形參傳過來的值
function sum (...result: number[]): number{return result.reduce((prev, cur) => {return prev + cur}, 0)
}sum(1, 2, 3, 4) // 10
function sum (a: number, ...result: number[]): number{return result.reduce((prev, cur) => {return prev + cur}, a)
}sum(1, 2, 3, 4) // 10
三、函數重載
javascript 是面向過程編程語言,沒有函數重載的概念
java 中函數重載指的是,兩個或者兩個以上同名函數,但它們的參數不一樣
typescript 中的函數重載指的是,通過為同一個函數提供多個函數類型定義來實現多種功能的目的。
typescript 為了兼容 js 重載的寫法和 java 中有區別。
function getInfo(name: string): string
function getInfo(age: number): number
function getInfo(str: any): any {if (typeof str === 'string') {return `我叫${str}`} else {return str}
} getInfo('張三') // 我叫張三
getInfo(19) // 19
getInfo(false) // ts編譯報錯
function getInfo(name: string): string
function getInfo(name: string, age: number): string
function getInfo(name: any, age?: any): any {if (age) {return `我叫${name},年齡是${age}`} else {return `我叫${name}`}
}getInfo('張三', 19) // 我叫張三,年齡是19
getInfo('張三') // 我叫張三
getInfo('zhangsan', true) // ts編譯報錯
getInfo(19) // ts編譯報錯