TS 泛型

泛型(宽泛的,不确定的类型)

  • 使用场景:定义一个函数或类时,无法确定要使用的具体类型(返回值、参数、属性的类型不能确定)
  • 泛型使用时相当于一个参数
javascript 复制代码
functiondemo<T>(arg: T): T{
   return arg;
}
// 泛型T可以看做一个变量
demo<number>(10)
demo<string>('你好')
// 基本类型可以不加泛型
demo(true)
demo(10)
泛型结合接口
javascript 复制代码
interface Param<A,B> {
   title: string,
   state: A,
   list: B[]
}

type ListType = {name:string,age:number}
const p1: Param<boolean,ListType> = {
   title: '泛型和接口结合使用',
   state: true,
   list: [
      {name:'张三',age:18},
      {name:'李四',age:16},
   ]
}
泛型继承
javascript 复制代码
// 泛型的继承(对泛型的约束)
function getLength<T extends { length:number }>(arg: T): number{
   return arg.length;
}
getLength([1,2,3,'4']) // 4
getLength('nihao') // 5

function getLength<T extends string | any[]>(arg: T): number{
   return arg.length;
}
getLength([1,2,3,'4']) // 4

// 当使用T[]时,T表示的是数组参数的元素类型
function getLength<T>(arg: T[]): number{
   return arg.length;
}
getLength<string | number>(['张三','李四',10]) // 3
类中使用泛型
javascript 复制代码
// 类中使用泛型
class MyClass<T>{
   prop: T;

   constructor(prop: T){
      this.prop = prop;
   }
}
// 泛型是一个type
type User = {name:string,age:number}
const user1:User = {name:'张三',age:18}
const c1 = new MyClass<User>( user1 )
// 泛型是基本类型
const c2 = new MyClass<string>('张三')
相关推荐
Irene199114 小时前
Prettier 配置文件 .prettierrc.js 和 .prettierrc.json 的区别
javascript·json
ttod_qzstudio14 小时前
Vue 3 + TypeScript 严格模式下的 Performance.now() 实践:构建高性能前端应用
typescript·performance
国服第二切图仔15 小时前
DevUI Design中后台产品开源前端解决方案之Carousel 走马灯组件使用指南
前端·开源
无限大615 小时前
为什么浏览器能看懂网页代码?——从HTML到渲染引擎的奇幻之旅
前端
福尔摩斯张15 小时前
Linux信号捕捉特性详解:从基础到高级实践(超详细)
linux·运维·服务器·c语言·前端·驱动开发·microsoft
2401_8603195215 小时前
DevUI组件库实战:从入门到企业级应用的深度探索 ,如何快速安装DevUI
前端·前端框架
cc蒲公英16 小时前
javascript有哪些内置对象
java·前端·javascript
zhangwenwu的前端小站16 小时前
vue 对接 Dify 官方 SSE 流式响应
前端·javascript·vue.js
王林不想说话16 小时前
受控/非受控组件分析
前端·react.js·typescript
_杨瀚博16 小时前
VUE中使用AXIOS包装API代理
前端