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
  • 第6章:泛型

第6章:泛型

泛型的基本概念

什么是泛型?

泛型(Generics)是 TypeScript 中用于创建可复用、类型安全的组件的重要特性。它允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型,从而增强代码的灵活性和类型安全性。

泛型的核心思想

  1. 类型参数化
    通过类型变量(如 <T>)将类型作为参数传递,使代码可以处理多种类型而非单一类型。

    function identity<T>(arg: T): T {
        return arg;
    }
    
  2. 代码复用性
    同一段逻辑可以适用于不同类型,避免重复编写相似代码。

  3. 类型约束
    在灵活性的同时保持类型检查,避免运行时错误。

为什么需要泛型?

通过一个例子对比非泛型与泛型实现的差异:

非泛型实现的问题

// 只能处理 number 类型
function getNumberArray(items: number[]): number[] {
    return items;
}

// 需要为 string 类型重复编写逻辑
function getStringArray(items: string[]): string[] {
    return items;
}

泛型实现的优势

// 一个函数处理所有类型
function getArray<T>(items: T[]): T[] {
    return items;
}

// 使用示例
const numArray = getArray<number>([1, 2, 3]); // T 被推断为 number
const strArray = getArray<string>(['a', 'b']); // T 被推断为 string

泛型类型参数命名规范

  • 通常使用单个大写字母作为类型变量名,常见约定:
    • T(Type)
    • K(Key)
    • V(Value)
    • E(Element)
  • 复杂的场景可使用描述性名称(如 TResponse)

泛型的应用场景

  1. 函数参数与返回值类型关联

    function pair<T, U>(first: T, second: U): [T, U] {
        return [first, second];
    }
    
  2. 集合类数据结构

    class Stack<T> {
        private items: T[] = [];
        push(item: T) { /*...*/ }
        pop(): T | undefined { /*...*/ }
    }
    
  3. API 响应包装

    interface ApiResponse<T> {
        data: T;
        status: number;
    }
    

类型推断的自动应用

TypeScript 能根据上下文自动推断泛型类型:

// 不需要显式指定 <number>
const result = identity(42); // T 被推断为 number

关键点总结

  • 泛型通过类型参数提供类型抽象能力
  • 在保持类型安全的同时减少代码重复
  • 广泛应用于函数、类、接口等场景
  • 类型推断可简化泛型调用语法
Last Updated:: 3/27/25, 10:50 AM