typeScript进阶(14)_泛型和注意事项

简介: TypeScript中的泛型允许创建可重用的代码。泛型可以定义函数、接口、类,支持传递类型参数,实现类型安全。泛型可以用于数组,约束类型参数必须符合特定的接口,也可以在接口和类中使用。泛型类可以包含多个类型参数,甚至在泛型约束中使用类型参数。

泛型

在这里插入图片描述

区别

1.不使用泛型
const returnStr = (str: string): string => {
   
  return str;
};

const returnNumber = (num: number): number => {
   
  return num;
};
2.使用泛型
const returnFun = <T>(varData: T): T => {
   
  return varData;
};

console.log(returnFun<string>('123456'))
console.log(returnFun('liuqing'))//自动类型推论

通过上面的例子我们可以了解到的信息:
1.使用泛型可以实现复用;
2.使用泛型后,调用方法可以写<xxx>,也可以不写,ts会自动类型推论;
3.T为变量,可以为随意字符变量。

数组泛型

我们也可以使用数组泛型(Array Generic) Array 来表示数组:

let arr: Array<number> = [1,2,2,3];

Array<number> === number[]

可参考:typeScript基础(6)_数组类型

多个类型参数

const returnFun = <T,G>(varData1: T,varData2:G): [T,G] => {
   
  return [varData1,varData2]
};
console.log(returnFun<string,number>('123456',123456)) //['123456',123456]

returnFun函数传入两个不通类型的数据,将他们以元组类型的形式返回。

类型约束

interface Tface {
   
  length:number
}
const returnFun = <T extends  Tface>(varData: T): T => {
   

  return varData ;
};

console.log(returnFun<string>("123456"));
// console.log(returnFun<number>(123456)); //类型“number”不满足约束“Tface”

当T几次恶化那个了Tface之后,T就被约束,这个时候我们传入的参数,就只能传包含length属性的值。

泛型接口

interface Tface {
   
  <T>(zjq: T): T;
}

const myFun: Tface = <T>(aaa: T): T => {
   
  return aaa;
};

console.log(myFun("六卿"))

泛型类

class F<T> {
   
  name: T;
  add: (num1: T) => T;
}

let f: F<string> = new F<string>();
f.name = "liuqing";
f.add = (num1: string) => num1;

在泛型约束中使用类型参数

你可以声明一个类型参数,且它被另一个类型参数所约束。比如

const myFun = <T extends G, G>(prop: T, obj: G): T => {
   
  return prop;
};

let x = {
    a: 1, b: 2, c: 3, d: 4 };

console.log(myFun(x, {
    b: 10, d: 20 }));

上面的意思是函数myFun的第一个参数继承了第二个参数,所以传入第一个参数,必须包含第二个参数。T的范围只能比G的范围更广。

目录
相关文章
|
7月前
|
安全 JavaScript 编译器
TypeScript 泛型:解锁灵活且安全的代码重用
TypeScript 泛型:解锁灵活且安全的代码重用
|
7月前
|
存储 JavaScript 安全
TypeScript 泛型:让你的代码既灵活又安全的“魔法”
TypeScript 泛型:让你的代码既灵活又安全的“魔法”
|
10月前
|
人工智能 JavaScript 程序员
一文彻底搞明白HarmonyOS基础TypeScript中的泛型函数
程序员Feri是一位拥有12年+经验的技术专家,擅长嵌入式、鸿蒙、人工智能和Java等领域。本文深入探讨TypeScript中的泛型函数,涵盖基础语法、类型约束、高级技巧及应用场景。通过泛型函数,实现代码逻辑与具体类型的解耦,提升类型安全性和复用性。内容包括集合操作、API抽象、工具类开发等实际应用,以及条件类型、默认类型参数和工具类型的高级技巧。最后提醒开发者注意过度泛型化和性能权衡问题,总结泛型函数在TypeScript类型系统中的核心地位及其未来发展方向。
302 1
一文彻底搞明白HarmonyOS基础TypeScript中的泛型函数
|
JavaScript 编译器
typescript之泛型
typescript之泛型
285 60
|
JavaScript
typeScript进阶(13)_类与注意事项(八项特性)
TypeScript的类支持特性包括:构造函数、继承(使用`extends`)、公有/私有/受保护修饰符、只读修饰符、参数属性、存取器(getters/setters)、抽象类(用`abstract`声明)。类可用作类型。
162 1
typeScript进阶(13)_类与注意事项(八项特性)
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
JavaScript 安全 算法
TypeScript:一个好泛型的价值
TypeScript:一个好泛型的价值
|
JavaScript 安全 前端开发
TypeScript :枚举&字符&泛型
本文介绍了 TypeScript 中的泛型、约束、枚举和字符操作的基本用法。通过示例代码展示了如何定义和使用泛型函数、类和接口,以及如何利用 `keyof` 约束类型。此外,还介绍了枚举的定义和使用,包括常量枚举和外部枚举的区别。最后,简要说明了 `?.` 和 `??` 操作符的用途,帮助处理可能为空的属性和提供默认值。
222 0
|
JavaScript 算法 开发者
16.【TypeScript 教程】TypeScript 泛型(Generic)
16.【TypeScript 教程】TypeScript 泛型(Generic)
382 2
|
JavaScript
TypeScript 泛型类型
TypeScript 泛型类型