typescript泛型的解释和理解

在TypeScript(以及其他支持泛型的编程语言)中,泛型(Generics)是一种允许你定义可重用的组件的工具。这些组件可以用各种类型工作,而不仅仅是一个单一的类型。

泛型提供了一种灵活和可重用的方式来创建函数、接口和类,而不会牺牲类型安全。

泛型函数

这是一个不使用泛型的函数,它接受一个number数组,并返回一个number数组:

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

使用泛型,你可以这样写:

function identity<T>(arr: T[]): T[] {
  return arr;
}

泛型接口

泛型不仅可以应用于函数,还可以应用于接口。例如:

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

泛型类

泛型还可以用于定义类。例如:

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

 

多个泛型参数

你还可以定义接受多个泛型参数的函数、接口或类:

function swap<T, U>(tuple: [T, U]): [U, T] {
  return [tuple[1], tuple[0]];
}

泛型约束

你还可以使用泛型约束,以限制泛型类型的使用范围:

interface Lengthwise {
  length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
  console.log(arg.length);
  return arg;
}

在这个例子中,泛型T必须遵守Lengthwise接口的结构。

泛型与其他类型的结合

泛型可以和联合类型、交叉类型、类型别名等一起使用,提供更高级的类型抽象和操作。

例如:

type Container<T> = T | null;

或者:

type Tree<T> = {
  value: T;
  left: Tree<T>;
  right: Tree<T>;
}

总的来说,泛型提供了一种强大而灵活的方式,用于将可重用的组件连接到类型上,同时又不牺牲类型信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值