TypeScript 泛型:解锁灵活且安全的代码重用

简介: TypeScript 泛型:解锁灵活且安全的代码重用

TypeScript 泛型:解锁灵活且安全的代码重用

在 TypeScript 中,泛型(Generics)是提升代码复用性和类型安全的核心利器。它允许我们编写可适应多种类型的组件,而非重复的冗余代码。

为什么需要泛型?

假设需要一个返回数组首元素的函数:

function getFirst(arr: number[]): number {
     
  return arr[0];  
}

但若需支持 string[],只能重写函数——这违反了 DRY(Don't Repeat Yourself)原则。泛型通过类型变量解决此问题:

function getFirst<T>(arr: T[]): T {
     
  return arr[0];  
}  
// 自动推断类型  
const num = getFirst([1, 2]);     // T = number  
const str = getFirst(["a", "b"]); // T = string

泛型的核心优势

  1. 类型安全
    • 避免 any 的运行时风险,编译器会检查类型一致性。
  2. 代码复用
    • 一套逻辑适配多种类型(数组、API 响应、状态管理等)。
  3. 智能推断
    • TS 能自动推导泛型类型,减少手动标注。

进阶应用

泛型约束:限制类型范围

interface HasLength {
    length: number }  
function logLength<T extends HasLength>(obj: T): void {
     
  console.log(obj.length);  
}  
logLength("hello"); // ✅ 字符串有 length  
logLength(42);      // ❌ 数字无 length,编译报错

泛型接口:定义灵活的数据结构

interface ApiResponse<T> {
     
  data: T;  
  error: string | null;  
}  
const userRes: ApiResponse<{
    name: string }> = ...;  
const postRes: ApiResponse<{
    title: string }> = ...;

实践建议

  • 避免过度泛化:仅在需要多类型支持时使用。
  • 明确约束:用 extends 确保类型符合预期行为。
  • 结合工具类型:如 Partial<T>Pick<T, K> 增强灵活性。

总结

泛型让 TypeScript 在静态类型与灵活性间取得完美平衡。掌握泛型,你将写出更简洁、健壮且易于扩展的代码,彻底告别重复劳动!

相关文章
|
4月前
|
JavaScript 安全 IDE
TypeScript 类型体操:别让 `any` 毁了你的安全网!
TypeScript 类型体操:别让 `any` 毁了你的安全网!
|
4月前
|
存储 JavaScript 安全
TypeScript 泛型:让你的代码既灵活又安全的“魔法”
TypeScript 泛型:让你的代码既灵活又安全的“魔法”
|
7月前
|
人工智能 JavaScript 程序员
一文彻底搞明白HarmonyOS基础TypeScript中的泛型函数
程序员Feri是一位拥有12年+经验的技术专家,擅长嵌入式、鸿蒙、人工智能和Java等领域。本文深入探讨TypeScript中的泛型函数,涵盖基础语法、类型约束、高级技巧及应用场景。通过泛型函数,实现代码逻辑与具体类型的解耦,提升类型安全性和复用性。内容包括集合操作、API抽象、工具类开发等实际应用,以及条件类型、默认类型参数和工具类型的高级技巧。最后提醒开发者注意过度泛型化和性能权衡问题,总结泛型函数在TypeScript类型系统中的核心地位及其未来发展方向。
168 1
一文彻底搞明白HarmonyOS基础TypeScript中的泛型函数
|
12月前
|
设计模式 JavaScript 安全
TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等
本文深入探讨了TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等,旨在帮助开发者在保证代码质量的同时,实现高效的性能优化,提升用户体验和项目稳定性。
326 6
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
JavaScript 安全 前端开发
TypeScript :枚举&字符&泛型
本文介绍了 TypeScript 中的泛型、约束、枚举和字符操作的基本用法。通过示例代码展示了如何定义和使用泛型函数、类和接口,以及如何利用 `keyof` 约束类型。此外,还介绍了枚举的定义和使用,包括常量枚举和外部枚举的区别。最后,简要说明了 `?.` 和 `??` 操作符的用途,帮助处理可能为空的属性和提供默认值。
153 0
|
4月前
|
JavaScript 前端开发
揭秘 TypeScript 条件类型:超越简单类型检查
揭秘 TypeScript 条件类型:超越简单类型检查
|
4月前
|
JavaScript 安全 索引
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
|
4月前
|
JavaScript 安全 编译器
TypeScript 类型守卫:让你的类型系统更智能
TypeScript 类型守卫:让你的类型系统更智能
|
9月前
|
存储 安全 JavaScript
TypeScript-内置应用程序类型-Recode
通过使用 `Record` 类型,开发者可以显著提升代码的安全性和可维护性。无论是配置对象、字典结构还是动态表单,`Record` 类型都提供了一个简洁、类型安全的解决方案。
393 82