typescript函数声明、函数传参、函数重载

//一:函数声明
//函数的声明
function fun1(): string {
  return '123'
}
//匿名函数声明
var fun2 = function(): number {
  return 1
}

fun2() //调用函数

//二:ts中定义方法传参
function fun3(a: number, b: number): number {
  return a + b
}
console.log(fun3(1, 2))

//不需要返回值时可以在方法后加上void
function fun4(a: number, b: number): void {
  console.log(a + b)
}

//方法可选参数
//es5里方法的实参和形参可以不一样,TS中必须一样,如果不一样需要配置可选参数
function fun5(a: string, b?: number): string {
  //?表示该参数可以不传,可选参数必须是最后一个参数
  return b ? '字符串' + a + b : '字符串' + a
}

console.log(fun5('ce', 1))

//默认可选参数
function fun6(name: string, age: number = 22): string {
  return age ? name + age : name + '不知道年龄'
}
console.log(fun6('kk')) //kk不知道年龄
console.log(fun6('kk', 18)) //kk18

//剩余参数
//扩展运算符   接收新参数传来的值
function sum(...arr: number[]): number {
  var sum = 0
  for (var i = 0; i < arr.length; i++) {
    sum += arr[i]
  }
  return sum
}
console.log(sum(12, 34, 56))

function sum2(a: number, ...arr: number[]): number {
  //a是传参的第一个参数
  var sum = a
  for (var i = 0; i < arr.length; i++) {
    sum += arr[i]
  }
  return sum
}
console.log(sum2(12, 34, 56))

//函数的重载
//通过为同一个参数提供多个参数类型定义来实现多种功能的目的
//es5中如果出现同名方法,那么下面的方法会替换上面的方法

function fun7(a: number): number
function fun7(a: number, b: number): number
function fun7(a: any, b?: any): any {
  return b ? a + b : b
}

 

### TypeScript 函数重载概述 函数重载允许同一名称的多个函数具有不同的参数列表,从而提供更灵活的功能。这使得函数可以根据传入的不同数量或类型的参数执行不同操作[^1]。 ### 实现方式 #### 方法一:函数声明和实现分离 在这种模式下,先定义若干个带有特定参数列表的函数签名,随后给出具体的函数实现。这种方式清晰地区分了接口与具体逻辑: ```typescript // 定义重载签名 function foo(x: number): string; function foo(y: string[]): number; // 提供实际实现 function foo(z: any): any { if (typeof z === 'number') { return `Number is ${z}`; } else if (Array.isArray(z)) { return z.length; } } ``` 上述代码展示了如何利用不同类型参数触发相应行为的能力。 #### 方法二:使用函数表达式加类型注解 另一种做法是在创建匿名函数时指定其预期接收及返回的数据形式,同样能达到类似效果: ```typescript type FooFunction = ((x: number) => string) & ((y: string[]) => number); const foo: FooFunction = function (z: any): any { if (typeof z === 'number') { return `Number is ${z}`; } else if (Array.isArray(z)) { return z.length; } }; ``` 此段落说明了通过组合多种输入输出配置达成多态性的途径[^2]。 ### 编写指南 - **一致性**:尽管存在多个签名描述,但它们都指向同一个底层实现; - **优先级**:当存在多个潜在适配项时,编译器按照自顶向下的原则选取最合适的那一个; - **安全性**:即使支持多样化的入口点,也不意味着接受`any`型数据——仍需明确定义合法范围内的所有可能性[^4]。 ### 示例分析 考虑如下场景:设计一个既能拼接字符串也能累加数值的操作符`add`: ```typescript // 重载签名 function add(a: string, b: string): string; function add(a: number, b: number): number; // 统一实现 function add(a: any, b: any): any { return a + b; // 运算符 '+' 对应于数字相加或字符串连接 } console.log(add(1, 2)); // 输出 "3" console.log(add('hello', '!')); // 输出 "hello!" ``` 这里体现了基于静态类型系统的灵活性以及对动态特性的保留[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值