当前位置: 首页 > news >正文

做生物学的网站/谷歌浏览器下载电脑版

做生物学的网站,谷歌浏览器下载电脑版,广州专业做网站的科技公司,伪静态网站配置泛型(Generics)是 TypeScript 的核心特性,它允许我们编写可复用、类型安全的代码,同时保持灵活性。以下是深度解析和实际应用指南: 一、泛型基础概念 本质:参数化类型,将类型作为变量传递&…

泛型(Generics)是 TypeScript 的核心特性,它允许我们编写可复用、类型安全的代码,同时保持灵活性。以下是深度解析和实际应用指南:


一、泛型基础概念

本质:参数化类型,将类型作为变量传递,像函数参数一样动态指定。

想象普通函数的参数是 值的变量,而泛型的参数是 类型的变量

  • T 就是一个类型变量,调用时才确定具体类型

  • 就像函数运行时才接收具体值一样,泛型在调用时接收具体类型

// 定义泛型函数
function identity<T>(arg: T): T {return arg;
}// 使用
const output1 = identity<string>("hello"); // 显式指定 T 为 string
const output2 = identity(42);              // 自动推断 T 为 number

二、泛型核心应用场景
1. 函数/方法泛型

典型场景:处理多种类型输入但逻辑相同的函数。

// 返回数组第一项
function firstElement<T>(arr: T[]): T | undefined {return arr[0];
}const str = firstElement(["a", "b"]); // T 推断为 string
const num = firstElement([1, 2]);     // T 推断为 number
2. 接口/类型泛型

典型场景:定义可复用的数据结构模板。

interface ApiResponse<T> {code: number;data: T;message: string;
}// 使用
type UserResponse = ApiResponse<{ name: string; age: number }>;
const res: UserResponse = {code: 200,data: { name: "Alice", age: 30 },message: "success"
};
3. 类泛型

典型场景:可定制化的类实现。

class Box<T> {private content: T;constructor(value: T) {this.content = value;}getValue(): T {return this.content;}
}const stringBox = new Box("hello");
const numberBox = new Box(42);
4. 约束泛型(Constraints)

典型场景:限制泛型参数必须满足某些条件。

interface HasLength {length: number;
}function logLength<T extends HasLength>(arg: T): void {console.log(arg.length);
}logLength("hello"); // OK,string 有 length 属性
logLength([1, 2]);  // OK,数组有 length
logLength(42);      // Error: number 没有 length
5. 默认泛型参数

典型场景:提供类型默认值。


interface Pagination<T = string> {items: T[];page: number;
}const p1: Pagination = { items: ["a", "b"], page: 1 }; // T 默认为 string
const p2: Pagination<number> = { items: [1, 2], page: 1 };

三、高级泛型技巧
1. 条件类型(Conditional Types)

典型场景:根据输入类型动态决定输出类型。


type IsString<T> = T extends string ? true : false;type A = IsString<"hello">; // true
type B = IsString<number>;  // false

四、实战应用案例
1. API 响应标准化

interface ApiResponse<T = any> {success: boolean;data: T;error?: string;
}async function fetchUser(): Promise<ApiResponse<{ id: number; name: string }>> {const res = await axios.get("/user");return res.data;
}
2

3. 工具类型实现
// 实现 Partial、Pick、Omit 等工具类型
type MyPartial<T> = { [P in keyof T]?: T[P] };
type MyPick<T, K extends keyof T> = { [P in K]: T[P] };
type MyOmit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

五、泛型最佳实践
  1. 避免过度泛型:只在真正需要灵活性的地方使用。

  2. 明确约束:用 extends 限制泛型范围,增强类型安全。

  3. 优先推断:尽量让 TypeScript 自动推断类型参数。

  4. 命名规范:泛型变量通常用 TUKV 等大写字母。


六、常见问题解答

Q1: 泛型会影响运行时性能吗?
A: 不会,泛型是编译期特性,会在编译后被擦除。

Q2: 泛型和 any 的区别?
A: 泛型保留类型信息,any 完全放弃类型检查。泛型是类型安全的。

Q3: 如何解决泛型推断失败?
A: 显式指定类型参数或调整函数签名。

http://www.whsansanxincailiao.cn/news/30283140.html

相关文章:

  • 如何网上做个人广告/搜索引擎优化seo是什么
  • 做自媒体可利用的国外网站/上海最近三天的新闻
  • 深圳市深圳市住房和建设局网站首页/友情链接seo
  • 建筑工程素材资源网站/站内优化包括哪些
  • 手机网站按那个尺寸做/网络营销手段有哪四种
  • 淘宝客网站做seo有用吗/重庆网络推广专员
  • 品牌网站建设哪里有/广州各区风险区域最新动态
  • 专业找工作网站下载/百度平台商家
  • 服务器wordpress建站教程/网络平台运营是做什么的
  • 自己家的电脑做网站需要备案没/为什么sem的工资都不高
  • 成都专业的网站建站公司/百度信息流代运营
  • 建网站安全/自动秒收录网
  • 有哪些做伦敦金的网站/seo顾问多少钱
  • 园林公司网站建设费用/百度站长工具平台
  • 网站导航栏怎么设置/优化网站找哪家
  • 网站里自己怎么做推广/离我最近的电脑培训中心
  • 尖草坪网站建设/搜索关键词排名推广
  • 东莞站福公司工资/模板免费网站建设
  • 做网站的流程是什么/seo推广软件代理
  • 宁波seo网络推广定制多少钱/seo外链优化培训
  • wordpress阿里云全站加速/一个完整的策划案范文
  • 做网站用别人的源码可以吗/seo教程 seo之家
  • 毕节市网站建设/杭州网站
  • 深圳制作外贸网站/汽车网站建设
  • o2o网站建设哪家好/关键词排名顾问
  • 如何在网站投放广告/torrentkitty磁力搜索引擎
  • 图片做网站/世界500强企业
  • 南京建设工程公共资源交易中心网站/优秀网页设计
  • 网站设计说明书整合/云盘搜
  • wordpress做物流网站/百度sem