YIngChenIt/Blogs

typescript(二) - 函数

Opened this issue · 0 comments

typescript(二) - 函数

函数的定义

在ts中函数是这样定义的

function say(name:string):void  {
    console.log(name)
}

可以定义函数的参数类型和返回值类型

函数表达式

type getNameFunction = (x:string, y:string) => string
let getName:getNameFunction = function(firstName,lastName) {
    return firstName + lastName
}

我们可以通过 type来申明函数的规则, 如上述申明了函数需要2个字符串参数, 并且返回值是字符串

没有返回值

这个我们在讲数据类型的时候已经讲过了, 如果函数没有返回值的话我们需要使用void

function say(name:string):void  {
    console.log(name)
}

需要注意的是,没有返回值并不代表函数没有return, 可以有以下三种情况

return 
return undifined
return null

可选参数

在我们使用函数的时候, 经常使用可选参数, 也就是有些参数没必要传进来

function saySomeThing(saySomeThing?:string):void {
    console.log(saySomeThing)
}

saySomeThing()
saySomeThing('hello ts')

我们使用xx?:yy的形式表示参数可以传也可以不传

默认参数

我们希望函数的参数有一些默认值, 这个和js没什么区别

function ajax(url:string,method:string='GET') {
    console.log(url,method)
}
ajax('/users') // /users  GET

剩余参数

在我们不知道执行函数的时候需要多少个参数的时候, 我们需要用剩余参数来申明参数

function sum(...numbers:number[]) {
    return numbers.reduce((val,item)=>val+=item,0);
}
console.log(sum(1,2,3));

函数重载

函数重载用的不多, 表示为一个函数提供多个函数类型定义, 这里就举一个简单的例子来理解一下

function attr(value:any):void {
    if (typeof value === 'string') {
        console.log('string', value)
    } else if (typeof value === 'number') {
        console.log('number', value)
    }
}
attr(1)
attr('hello ts')

我们希望attr只能接受stringnumber, 我们可以用函数重载, 当然用联合类型也可以

function attr(value:string):void
function attr(value:number):void
function attr(value:any):void {
    if (typeof value === 'string') {
        console.log('string', value)
    } else if (typeof value === 'number') {
        console.log('number', value)
    }
}
attr(1)
attr('hello ts')
attr(true)// 报错