typescript中的函数
- ts中函数定义
// 函数声明
function run(): string { // 函数必须返回是string类型,(定义返回什么类型必须返回对应的类型,返回不对应类型ts报错)
return 'jsbin'
}
// 匿名函数
let runOne = function(): string {
return 'jsbin'
}
- ts中函数的传参
function runTwo(name: string, age: number): string { // 形参定义的什么类型数据,函数调用传递的实参必须是对应类型,不然ts报错
return 'jsbin'
}
// 没有返回值的方法
function runVoid(): void { // 没有返回值使用void
console.log('jsbin')
}
- ts中的函数的可选参数(js中函数的形参和实参可以不一致,但是在ts中函数的形参和实参一般来说必须一直,如果实际情况需要则需要配置)
function runThree(name:string, age?:number): string{ // 可选参数必须下载形参的最后面
return 'jsbin'
}
runThree() // An argument for 'name' was not provided
runThree('jsbin') // 这样是可以的,name是必传,age可选项
- ts中函数的默认参数(es6之前的javaScript无法设置默认参数,ts,es6可以设置)
function runFour(name:string = 'jsbin', age?:number): string{
return 'jsbin'
}
- ts中函数的剩余参数
function sum(a: number,b: number,c: number,d: number): number { // 如果参数过多,这样写起来不优雅
return a + b + c + d
}
function sumCount(...result:number[]): number{ // 这样写起来比较优雅
let sum = 0
for(let i=0; i<result.length; i++) {
sum = sum + result[i]
}
return sum
}
sumCount(1,2,4,6,)
function sumCountOne(x:number, ...result:number[]): number{ // 这样写起来比较优雅
let sum = 0 + x
for(let i=0; i<result.length; i++) {
sum = sum + result[i]
}
return sum
}
sumCountOne(2,8,43434,434) // 其中实参2对应的形参就是x,剩余参数...result解析
- ts中函数的重载,在js中没有重载,最后的一个方法会将前面的同名方法全部覆盖,ts中通过同一个函数提供多个函数类型定义来显示不同功能的目的。
function getUserInfo(name: string):string;
function getUserInfo(age: number):number;
function getUserInfo(str:any): any{
if(typeof str === 'string') {
return 'my name is ' + str
}else{
return str + ''
}
}
console.log(getUserInfo(30)) // 正确
console.log(getUserInfo('jsbin')) // 正确
// 下面语句调用错误 因为在在函数重载的选项中没有找到对应类型
// No overload matches this call.Overload 1 of 2, '(name: string): string', gave the following error.类型“true”的参数不能赋给类型“string”的参数。
// Overload 2 of 2, '(age: number): number', gave the following error.类型“true”的参数不能赋给类型“number”的参数
console.log(getUserInfo(true))
网友评论