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的范围更广。

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