typescript(二) - 函数
Opened this issue · 0 comments
YIngChenIt commented
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
只能接受string
和number
, 我们可以用函数重载, 当然用联合类型也可以
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)// 报错