typescript-logo.jpg
函數(shù)有兩種形式另假,函數(shù)聲明和函數(shù)表達(dá)式
函數(shù)聲明
TypeScript中铃拇,形參跟實(shí)參的數(shù)量要一樣
function sum (x: number, y: number): number {
return x + y
}
sum(1, 2 ,3) // Expected 2 arguments, but got 3
sum(1) // Expected 2 arguments, but got 1.ts(2554)
demo1.ts(166, 26): An argument for 'y' was not provided.
函數(shù)表達(dá)式
let mySum: (x:number, y:number) => number = function (x:number, y:number) {
return x + y
}
TypeScript中畦娄,=>要區(qū)別與es6中的箭頭函數(shù)卓舵,TypeScript是用來(lái)定義函數(shù)的,左側(cè)的是輸入類(lèi)型跳芳,需要用括號(hào)括起來(lái)芍锦,右邊是輸出類(lèi)型
可選參數(shù)
在函數(shù)的定義之中,允許可選參數(shù)飞盆,亦可像es6那樣添加默認(rèn)值娄琉,但是可選參數(shù)必須作為最后一個(gè)形參。
function fullName (firstName?: string, lastName: string) {
}
// 報(bào)錯(cuò):A required parameter cannot follow an optional parameter.
function fullName (firstName: string, lastName?: string) {
}
function fullName1 (firstName: string = 'chris', lastName?: string) {
}
function fullName2 (firstName: string, lastName: string = 'bryant') {
}
function fullName3 (firstName: string, lastName?: string = 'bryant') {
} // fullName3 報(bào)錯(cuò):Parameter cannot have question mark and initializer (參數(shù)不能同時(shí)帶有初始化和問(wèn)號(hào))
剩余參數(shù)
在TypeScript中我們依然可以用...rest來(lái)定義函數(shù)
function push (array: any[], ...items: any[]) {
items.forEach(ele => {
array.push(ele)
})
}
let a = []
push(a, 1, 2 , 3)
console.log(a) // [ 1, 2, 3 ]
重載
有這樣的場(chǎng)景吓歇,當(dāng)我們需要一個(gè)函數(shù)接受不同的參數(shù)和類(lèi)型的時(shí)候孽水,我們就需要重載了
function reverse(x: number): number
function reverse(x: string): string
function reverse(x:number | string): number | string {
if (typeof x === 'number') {
return +(x.toString().split('').reverse().join(''))
} else if (typeof x === 'string') {
return x.toString().split('').reverse().join('')
}
}
console.log(reverse(321), reverse('qwer')) // 123 'rewq'