TypeScript函数的三种定义类型
1,定义时有函数本身的参数约束、返回值约束
// 声明式类型的函数
function funcType(name:string,age:number):number {
return 2*age
}
var ageNum:number = funcType('huzhen', 23)
// var ageNum:number = funcType('huzhen', 23, 12); //报错
// 函数某个参数不确定是否传
function funcType2(name:string,age:number,sex?:string):number {
return 2*age
}
var agenum2:number = funcType2('ke', 18, '女')
var agenum22:number = funcType2('hu', 12)
函数参数的默认值
// 函数参数的默认值(如果一个参数有默认值,则这个参数可以不传)
function functype3(name?:number,age:number=20):number {
return name + age;
}
console.log(functype3()) //NaN,第一个参数有?可以不传,第二个参数有默认值可以不传
console.log(functype3(22)) //42
console.log(functype3(3, 5)) //8
// 第一个参数有默认值可以不传,第二个参数必须要传
function functype4(name:number=10,age:number):number {
return name + age;
}
console.log(functype4(20)) //报错
console.log(functype4(undefined, 20)) //30,第一个参数可以不传,为了不报错第一个参数可以传undefined
console.log(functype4(3, 5)) //8
2,定义时有函数本身的参数约束、返回值约束,还有函数本身赋值的变量的约束
// 表达式类型的函数
var func = function(name:string,age:number):number {
return age
}
// 第一种约束方案
var func2:(name:string,age:number)=>number = function(name:string,age:number):number {
return age
}
// 第二种约束方案
interface funcTp {
(name:string,age:number):number
}
var func3:funcTp = function(name:string, age:number):number {
return age
}
3,采用重载的方式支持联合类型的函数关系
// 对于联合类型的行数,可以采用重载的方式
function getValue(value:number):number
function getValue(value:string):string
function getValue(value:string|number):string|number {
return 'huzhen'
}
let a:string|number = getValue(1) //希望返回的是数字1,但是返回的是联合类型的1,所以不好
let b:number = getValue(2)
let c:string = getValue('333')