TS泛型类型

今天 9057阅读 0评论

泛型类型(Generic Types)是编程语言中提供的一种强大特性,它允许开发者创建可以适应多种类型的数据结构和算法。在 TypeScript 中,泛型允许我们定义在编译时不知道具体类型的函数、类或接口。通过使用占位符类型(称为类型参数),泛型可以帮助我们编写更加通用、可复用的代码,同时保留静态类型检查的优势。

举例来说,在 TypeScript 中定义一个泛型函数或泛型类:

泛型函数示例:

function identity(arg: T): T {
  return arg;
}
let output1 = identity("Hello World"); // 输出类型为 string
let output2 = identity(42); // 输出类型为 number

在这个例子中, 是一个类型参数,当调用 identity 函数时,我们可以指定 T 为任何类型。

泛型类示例:

class Box {
  value: T;
  constructor(value: T) {
    this.value = value;
  }
}
let stringBox = new Box("Hello");
let numberBox = new Box(42);
// stringBox.value 的类型是 string
// numberBox.value 的类型是 number

在这个 Box 类中,T 是一个泛型类型参数,它代表了存储在 value 属性中的实际类型。创建 Box 类的实例时,我们可以指定 T 为任何类型。

通过这种方式,泛型增强了代码的可复用性和类型安全性,避免了不必要的类型转换和潜在的运行时错误。

更多 TypeScript 中泛型的例子:

泛型函数 - 映射函数

function mapArray(array: T[], mapper: (item: T) => U): U[] {
  return array.map(mapper);
}
let numbers = [1, 2, 3, 4, 5];
let strings = mapArray(numbers, (n) => n.toString()); // strings 的类型是 string[]

在这个例子中,mapArray 函数接受一个类型为 T 的数组和一个映射函数,返回一个类型为 U 的数组。在调用时,根据传入的参数类型,编译器能够推断出返回值的类型。

泛型类 - 货币转换器

class CurrencyConverter {
  conversionRate: number;
  constructor(rate: number) {
    this.conversionRate = rate;
  }
  convert(value: number): number {
    return value * this.conversionRate;
  }
}
const usdToEurConverter = new CurrencyConverter(0.85);
let convertedAmount = usdToEurConverter.convert(100); // convertedAmount 的类型是 number

这里,CurrencyConverter 类接受两个泛型参数,代表货币类型,虽然这个例子中并未实际利用这些类型参数(只是为了展示泛型类的使用),但在实际开发中,类型参数可以用于限制输入输出的货币类型。

泛型接口 - 键值对集合

interface KeyValuePairs {
  [key: K]: V;
}
let myPairs: KeyValuePairs = {
  "apple": 1,
  "banana": 2,
  "cherry": 3,
};

此 KeyValuePairs 接口使用了索引签名和泛型,表示它可以存储任意数量的键值对,其中键的类型为 K,值的类型为 V。在实例化时,我们指定了 string 作为键类型,number 作为值类型。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,9057人围观)

还没有评论,来说两句吧...

目录[+]