Skip to content

泛型

TypeScript 的泛型(Generics)允许你定义灵活且可复用的组件,这些组件可以支持多种类型。泛型可以看作是一个组件的蓝图,你可以使用不同的类型来实例化这个蓝图。 泛型的主要优势是它们可以增加代码的重用性,类型安全性和灵活性。

泛型函数

一个泛型函数接受一个或多个类型参数。

typescript
function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>("myString"); // 返回 "myString"  
let output2 = identity<number>(123); // 返回 123

泛型类

你也可以定义泛型类,这样类就可以有多个不同的类型版本。

typescript
class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = (x, y) => x + y;

console.log(myGenericNumber.add(1, 2)); // 输出 3

泛型接口

你还可以定义泛型接口。

typescript
interface GenericIdentityFn<T> {
    (arg: T): T;
}

function identity<T>(arg: T): T {
    return arg;
}

let myIdentity: GenericIdentityFn<number> = identity;

泛型约束

有时候你可能想限制泛型参数的类型。例如,你可能只想让你的泛型函数接受那些具有 .length 属性的类型。这时你可以使用泛型约束。

在下面例子中,T 被约束为具有 length 属性的任何类型。因此,你可以传入字符串或任何具有 length 属性的对象。

typescript
function logLength<T extends { length: number }>(arg: T): void {
    console.log(arg.length);
}

logLength("hello"); // 输出 5  
logLength({length: 10, value: "test"}); // 输出 10
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!