/* 一、用数据类型对函数输入和输出进行约束*/
function sum(x: number, y: number): number {
return x + y
}
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y
}
/*二、用接口的方式来定义一个函数需要符合的形状*/
interface SearchFunc {
(source: string, subString: string): boolean
}
let mySearch: SearchFunc
mySearch = function (source: string, subString: string) {
return source.search(subString) !== -1
}
/* 三、可选参数?*/ //可选参数后面不允许再出现必需参数了
// function buildName(firstName: string, lastName?: string) {
// if (lastName) {
// return firstName + ' ' + lastName
// } else {
// return firstName
// }
// }
// let tomcat = buildName('Tom', 'Cat')
// let tom = buildName('Tom')
/* 四、参数默认值*/ //TypeScript会将添加了默认值的参数识别为可选参数:此时就不受「可选参数必须接在必需参数后面」的限制了
function buildName(firstName: string, lastName: string = 'Cat') {
return firstName + ' ' + lastName
}
let tomcat = buildName('Tom', 'Cat')
let tom = buildName('Tom')
/* 五、剩余参数 */ //ES6 中,可以使用 ...rest 的方式获取函数中的剩余参数(rest 参数) //rest 参数只能是最后一个参数,关于 rest 参数,可以参考 [ES6 中的 rest 参数][]。
function push(array: any[], ...items: any[]) {
items.forEach(function (item) {
array.push(item)
})
}
let a = []
push(a, 1, 2, 3)
/* 六、重载 */ //重载允许一个函数接受不同数量或类型的参数时,作出不同的处理
// function reverse(x: number | string): number | string {
// if (typeof x === 'number') {
// return Number(x.toString().split('').reverse().join(''))
// } else if (typeof x === 'string') {
// return x.split('').reverse().join('')
// }
// }
function reverse(x: number): number //前几次都是函数定义,最后一次是函数实现
function reverse(x: string): string
function reverse(x: number | string): number | string {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''))
} else if (typeof x === 'string') {
return x.split('').reverse().join('')
}
}
网友评论