typeScript学习02

typescript中的函数

  1. ts中函数定义
// 函数声明
function run(): string {    // 函数必须返回是string类型,(定义返回什么类型必须返回对应的类型,返回不对应类型ts报错)
  return 'jsbin'
}

// 匿名函数
let runOne = function(): string {
  return 'jsbin'
}
  1. ts中函数的传参
function runTwo(name: string, age: number): string {  // 形参定义的什么类型数据,函数调用传递的实参必须是对应类型,不然ts报错
  return 'jsbin'
}

// 没有返回值的方法
function runVoid(): void {  // 没有返回值使用void
  console.log('jsbin')
}
  1. ts中的函数的可选参数(js中函数的形参和实参可以不一致,但是在ts中函数的形参和实参一般来说必须一直,如果实际情况需要则需要配置)
function runThree(name:string, age?:number): string{  // 可选参数必须下载形参的最后面
  return 'jsbin'
}

runThree()  // An argument for 'name' was not provided
runThree('jsbin')   // 这样是可以的,name是必传,age可选项
  1. ts中函数的默认参数(es6之前的javaScript无法设置默认参数,ts,es6可以设置)
function runFour(name:string = 'jsbin', age?:number): string{
  return 'jsbin'
}
  1. 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解析
  1. 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))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。