TypeScript 泛型详解:定义、使用、特点优势、泛型约束与泛型数据类型
在 TypeScript 开发中泛型是实现类型复用、类型安全、解耦代码的核心特性能够告别any类型带来的类型丢失问题让组件、函数、数据类型具备适配多类型且保留类型校验的能力。本文按照规范代码缩进、命名、空格、格式书写风格全面讲解 TS 泛型的定义、基础使用、特点优势、extends泛型约束、keyof关键字以及带泛型的常用数据类型。一、泛型基本定义泛型通俗理解就是类型的参数化把类型当作参数传递在定义函数、接口、类时不预先指定具体类型而是在使用时再传入实际类型。语法格式通过尖括号T声明泛型参数T是泛型占位符可自定义为 U、V、K 等遵循代码命名规范语义化英文命名不使用拼音常量全大写、函数大写下划线分隔。二、泛型基础使用1. 泛型函数遵循缩进 4 空格、大括号换行独占、运算符前后加空格、if / 函数语句规范书写// 通用返回函数T 为泛型占位符 function Get_ResultT(value: T): T { return value; } // 调用时指定具体类型 let strRes Get_Resultstring(泛型测试); let numRes Get_Resultnumber(100);2. 泛型接口interface Response_DataT { code: number; message: string; data: T; } // 接口使用泛型指定 data 为数组类型 const res: Response_Datanumber[] { code: 200, message: 请求成功, data: [1, 2, 3] };3. 泛型类class Base_ArrayT { private list: T[] []; Add_Item(item: T): void { this.list.push(item); } Get_List(): T[] { return this.list; } }三、泛型特点与优势类型复用一份代码可适配多种数据类型无需为不同类型重复编写冗余函数和接口。类型安全编译期做类型校验杜绝any类型导致的隐式类型转换错误IDE 可智能提示属性和方法。保留类型推导使用泛型后返回值、参数可自动推导类型无需手动重复声明。代码高内聚低耦合抽象通用逻辑将业务逻辑与具体数据类型解耦提升可维护性。四、extends 泛型约束默认泛型T可以接收任意类型若需要限制泛型的类型范围就用extends做泛型约束限定泛型必须满足指定结构或继承指定类型。1. 基础约束约束必须包含指定属性// 约束 T 必须包含 id 属性 interface Has_Id { id: number; } function Print_IdT extends Has_Id(obj: T): void { console.log(obj.id); }2. 多泛型约束function Merge_ObjectT extends object, K extends object(a: T, b: K): T K { return { ...a, ...b }; }五、了解 keyof 关键字keyof是 TS 内置关键字作用是获取对象类型的所有键名联合成字面量类型常和泛型搭配使用实现对象属性的类型安全访问。const CONST_USER { name: 张三, age: 20, gender: 男 }; // keyof 提取对象所有键类型 type User_Key keyof typeof CONST_USER; // 泛型 keyof 约束只能传入对象合法键名 function Get_PropT, K extends keyof T(obj: T, key: K): T[K] { return obj[key]; }优势只能传入对象已存在的键编译时报错避免字符串硬编码导致的属性不存在问题。六、带有泛型的常用数据类型TS 内置大量自带泛型的工具类型和基础数据类型日常开发高频使用1. 数组泛型let arr: Arraystring [TS, 泛型];2. Promise 泛型限定异步请求返回值类型function Get_Data(): Promisenumber { return new Promise((resolve) { resolve(200); }); }3. 内置泛型工具类型Partial、Required、Readonly、Record都是自带泛型的工具类型// RecordK, T 定义键类型 K、值类型 T 的对象 type User_Map Recordstring, number; // Partial 把所有属性变为可选 type Partial_User Partial{ name: string; age: number };七、总结泛型是类型参数化用T声明使用时传入具体类型支持泛型函数、接口、类实现逻辑通用化extends可约束泛型范围限制传入的类型结构keyof提取对象键名联合类型配合泛型实现安全属性访问TS 内置数组、Promise、工具类型都基于泛型实现熟练使用可大幅提升 TS 代码规范性、类型安全性与复用性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2602625.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!