TypeScript-泛型

简介: TypeScript-泛型

泛型概述


在编写代码的时候我们既要考虑代码的 健壮性, 又要考虑代码的 灵活性可重用性通过 TS 的静态检测能让我们编写的代码变得更加 健壮, 但是在变得健壮的同时却丢失了 灵活性可重用性所以为了解决这个问题 TS 推出了 泛型 的概念 通过 泛型 不仅可以让我们的代码变得更加 健壮, 还能让我们的代码在变得 健壮 的同时保持 灵活性可重用性

还是和之前一样的套路,利用一个需求来引出没有使用泛型的弊端,需求: 定义一个创建数组的方法, 可以创建出 指定长度 的数组, 并且可以用 任意指定的内容 填充这个数组:

  • 第一版代码实现
let getArray = (value: number, items: number = 5): number[] => {
    return new Array(items).fill(value);
};
let arr = getArray(6, 3);
console.log(arr);


但是发现第一版的代码当中存在问题,就是只能存储 number


  • 第二版代码实现
let getArray = (value: any, items: number = 5): any[] => {
    return new Array(items).fill(value);
};
let arr = getArray("abc", 3);
console.log(arr);

如上需求实现代码当前存在的问题:

  1. 编写代码没有提示, 因为 TS 的静态检测不知道具体是什么类型
  2. 哪怕代码写错了也不会报错, 因为 TS 的静态检测不知道具体是什么类型

如果这个时候数组当中只有数字,那么就会存在属性调用问题,因为数字 number 当中是不存在 .length 的属性的所以会报错然而在编写的时候编译器是没有报错的:


let getArray = (value: any, items: number = 5): any[] => {
    return new Array(items).fill(value);
};
let arr = getArray(6, 3);
// arr = [6, 6, 6] => [3, 3, 3]
let res = arr.map(item => item.length);
console.log(res);

那么如上的需求就看到这里,接下来再看一个需求利用这个需求来引出泛型,需求: 要有代码提示, 如果写错了要在编译的时候报错:

  • 代码实现
let getArray = <T>(value: T, items: number = 5): T[] => {
    return new Array(items).fill(value);
};
let arr = getArray<string>('abc');
let res = arr.map(item => item.length);
console.log(res);


如上代码我们指定泛型的类型为 string 所以调用 .length 就不会报错这是正常的,如果我们将泛型的类型改为 number 在来看的话编译器就会直接报错:




注意点


  • 泛型具体的类型可以不指定, 如果没有指定, 那么就会根据我们传递的泛型参数自动推导出来
let getArray = <T>(value: T, items: number = 5): T[] => {
    return new Array(items).fill(value);
};
let arr = getArray("BNTang");
let res = arr.map(item => item.length);
console.log(res);
let getArray = <T>(value: T, items: number = 5): T[] => {
    return new Array(items).fill(value);
};
let arr = getArray(6);
let res = arr.map(item => item);
console.log(res);

最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
6月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
126 0
|
6月前
|
JavaScript 编译器
TypeScript中泛型在函数和类中的应用
【4月更文挑战第23天】TypeScript的泛型在函数和类中提供了灵活性,允许处理多种数据类型。了解泛型是掌握TypeScript类型系统的关键。
|
2月前
|
JavaScript 编译器
typescript之泛型
typescript之泛型
131 60
|
29天前
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
2月前
|
JavaScript 安全
typeScript进阶(14)_泛型和注意事项
TypeScript中的泛型允许创建可重用的代码。泛型可以定义函数、接口、类,支持传递类型参数,实现类型安全。泛型可以用于数组,约束类型参数必须符合特定的接口,也可以在接口和类中使用。泛型类可以包含多个类型参数,甚至在泛型约束中使用类型参数。
23 1
typeScript进阶(14)_泛型和注意事项
|
1月前
|
JavaScript 安全 前端开发
TypeScript :枚举&字符&泛型
本文介绍了 TypeScript 中的泛型、约束、枚举和字符操作的基本用法。通过示例代码展示了如何定义和使用泛型函数、类和接口,以及如何利用 `keyof` 约束类型。此外,还介绍了枚举的定义和使用,包括常量枚举和外部枚举的区别。最后,简要说明了 `?.` 和 `??` 操作符的用途,帮助处理可能为空的属性和提供默认值。
|
3月前
|
JavaScript 安全 算法
TypeScript:一个好泛型的价值
TypeScript:一个好泛型的价值
|
4月前
|
JavaScript 前端开发 程序员
Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
79 0
|
5月前
|
JavaScript
TypeScript 泛型类型
TypeScript 泛型类型
|
5月前
|
JavaScript Java 编译器
TypeScript 泛型
TypeScript 泛型