泛型
泛型(Generics)是 TypeScript 的一个强大特性,允许我们在定义函数、接口或类时使用占位符类型,使得代码更加灵活和复用。
泛型函数
泛型函数可以接收不同类型的参数,并根据传入的类型自动推断返回值的类型。
function identity<T>(arg: T): T {
return arg;
}
let result = identity(5); // result 的类型为 number
泛型接口
泛型也可以应用于接口中,从而实现对类型的灵活约束。
interface Box<T> {
value: T;
}
let box: Box<number> = { value: 123 };
泛型类
泛型类可以在类中使用泛型,支持多种类型的实例化。
class GenericBox<T> {
constructor(public value: T) {}
getValue(): T {
return this.value;
}
}
let stringBox = new GenericBox<string>("Hello");
let numberBox = new GenericBox<number>(123);
泛型约束与默认类型
泛型可以通过约束来限制接受的类型,确保它们符合某些条件。也可以设置默认类型,如果没有传入类型参数时使用默认值。
泛型约束
function logLength<T extends { length: number }>(arg: T): void {
console.log(arg.length);
}
logLength([1, 2, 3]); // 数组
logLength("Hello"); // 字符串
默认类型
function create<T = string>(value: T): T {
return value;
}
let result1 = create(123); // T 默认为 number
let result2 = create("Hello"); // T 默认为 string
泛型工具类型应用
TypeScript 提供了一些内置的泛型工具类型,如 Partial<T>、Readonly<T>、Record<K, T> 等,用于简化常见类型操作。
type User = { name: string; age: number };
type PartialUser = Partial<User>; // { name?: string; age?: number }
type ReadonlyUser = Readonly<User>; // { readonly name: string; readonly age: number }
type UserMap = Record<string, User>; // { [key: string]: User }
泛型提供了类型的抽象能力,使得 TypeScript 在确保类型安全的同时,能够轻松处理各种不同的类型,极大提升了代码的灵活性和复用性。
相关内容
- 函数与类型 TypeScript 中函数相关的类型注解方式,包括参数与返回值类型、可选与默认参数、剩余参数,以及函数重载的用法。
- 接口与对象类型 TypeScript 中接口(interface)与对象类型的使用方法,包括 interface 与 type 的区别、可选与只读属性、索引签名以及函数类型定义...
- TypeScript 简介 TypeScript 是由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集(superset),也就是说,所有合法的 JavaS...
- 类型系统基础 TypeScript 中的基本类型系统,包括原始类型、数组与元组、枚举、any 与 unknown 类型、类型别名与交叉类型等内容。
- 高级类型 介绍 TypeScript 中的高级类型,包括联合类型、类型保护、类型断言、字面量类型、映射类型、条件类型等,帮助开发者灵活使用复杂的类型。
- 类与面向对象 TypeScript 中类的定义方式、继承机制、访问修饰符,以及如何结合接口使用类,并了解抽象类与多态的基础用法。