函数内参数类型也是可以定义的
constfn(name:string,age:number):string{
returnname+age
}
leta=fn('小满',10000)//输入不符合上述参数内定义的类型就会出错
console.log(a)//输出小满10000
--------------------------------------------------------------------
constfn(name:string,age:number=666):string{//如果在下面使用的时候,没有参数传进来就会以你在这里设置的默认参数执行,比如这个666
returnname+age
}
leta=fn('小满')//输入不符合上述参数内定义的类型就会出错
console.log(a)//输出小满666
--------------------------------------------------------------------
constfn(name:string,age?:number=666):string{//也可以使用这个`?`操作符,age传不传就变成可选的了
returnname+age
}
leta=fn('小满穿女仆装')//输入不符合上述参数内定义的类型就会出错
console.log(a)//输出小满穿女仆装
对象形式的定义
跟定义对象差不多,但是在针对多个参数的时候会更加的方便,且记得引用的时候要写成({xxxx})形式,不然会报错,输出的是数组形式的
interfaceUser{
name:string;
age:number
}
constfn(user:User):User{//这里的参数填写方式就变得简单了
returnuser
}
leta=fn({
name:"'小满",
age:18
})//输入不符合上述参数内定义的类型就会出错
console.log(a)//输出{name:'小满',age:18}
函数重载
重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。
如果参数类型不同,则参数类型应设置为 any。
参数数量不同你可以将不同的参数设置为可选。
为了让编译器能够选择正确的检查类型,它与 JavaScript 里的处理流程相似。 它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。
functionfn(params:number):void//第一套规则
functionfn(params:string,params2:number):void//第二套规则
functionfn(params:any,params?:any):void{
console.log(params)
console.log(params2)
}
leta=fn(1,1)
//输出1跟undefined,因为遵循的是第一套规则
leta=fn("1",1)
//输出"1"跟1,遵循的是第二套规则