Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第3章:函数

第3章:函数

函数重载

什么是函数重载?

函数重载(Function Overloading)允许你为一个函数提供多个类型定义,使得该函数可以根据不同的参数类型或数量执行不同的逻辑。TypeScript 的函数重载通过声明多个函数签名(不包含实现)和一个实现签名(包含具体实现)来完成。

基本语法

// 重载签名(类型声明)
function greet(name: string): string;
function greet(age: number): string;
function greet(isMorning: boolean): string;

// 实现签名(实际函数体)
function greet(value: string | number | boolean): string {
  if (typeof value === "string") {
    return `Hello, ${value}!`;
  } else if (typeof value === "number") {
    return `You are ${value} years old.`;
  } else {
    return value ? "Good morning!" : "Good evening!";
  }
}

使用场景

  1. 参数类型不同:如 string 和 number 输入对应不同返回类型。
  2. 参数数量不同:如可选参数或剩余参数场景。
  3. 提高类型安全性:明确约束输入输出类型关系。

注意事项

  1. 实现签名必须兼容所有重载签名:参数和返回类型需覆盖所有可能情况。
  2. 编译器仅检查重载签名:调用时以最前面的匹配签名为准。
  3. 避免过度使用:简单的联合类型可能比重载更清晰。

实际案例

// 重载:字符串拼接或数字相加
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
function combine(a: any, b: any): any {
  return a + b;
}

combine("Hello", "World"); // 返回 "HelloWorld"
combine(1, 2);            // 返回 3
combine(1, "2");          // 编译错误(无匹配签名)

与联合类型的区别

特性函数重载联合类型参数
适用场景参数类型与返回值有明确映射关系参数类型独立无关时
类型提示每个重载有独立提示统一提示所有可能类型
实现复杂度需手动处理所有分支自动推断

最佳实践:优先使用联合类型,仅在需要精确区分参数-返回值关系时使用重载。

Last Updated:: 3/27/25, 10:50 AM