函数类型

typescript-logo.jpg

函数有两种形式,函数声明和函数表达式

函数声明

TypeScript中,形参跟实参的数量要一样

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.

函数表达式

let mySum: (x:number, y:number) => number = function (x:number, y:number) {
    return x + y
}

TypeScript中,=>要区别与es6中的箭头函数,TypeScript是用来定义函数的,左侧的是输入类型,需要用括号括起来,右边是输出类型

可选参数

在函数的定义之中,允许可选参数,亦可像es6那样添加默认值,但是可选参数必须作为最后一个形参。

function fullName (firstName?: string, lastName: string) {

}
// 报错: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 报错:Parameter cannot have question mark and initializer (参数不能同时带有初始化和问号)

剩余参数

在TypeScript中我们依然可以用...rest来定义函数

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 ]

重载

有这样的场景,当我们需要一个函数接受不同的参数和类型的时候,我们就需要重载了

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'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容