赞
踩
前言:
只是一篇学习笔记!!!
正文:
泛型:指在定义函数、接口或类的时候,不预先指定具体类型,而在使用的时候再指定类型。
- //泛型函数
- //需求:创建一个方法使返回值的类型与传入参数的类型相同
- function getSameType<T>(value:T):T{
- return value
- }
- console.log(getSameType(<number> 2)) //在使用的时候要指明类型,其实可以不指明,ts会进行类型推断
- console.log(getSameType(<string>'4'))
在使用泛型变量的时候,必须把这些变量当做任意或所有类型。
- function getSameType<T>(value:T):number{
- return value.length //类型T上不存在属性“lebgth”
- }
- console.log(getSameType(<string>'123')) //即使在使用的时候指定的类型存在length属性,还是报错
解决方案:(使用接口约束类型)
- interface Itype{
- length:number
- }
- function getSameType<T extends Itype>(value:T):number{
- return value.length
- }
- getSameType(<string>'123')
- getSameType(<Array<number>>[1,2,3])
- getSameType(<number>123) //类型"number"的参数不能赋给类型"Itype"的参数
定义接口:(在使用接口的时候指定类型)
- 方式一:
- interface IArr{
- <T>(value:T,count:number):Array<T> //定义函数的格式
- }
- const getArr1:IArr = function <T>(value:T,count:number):T[]{
-
- }
- 方式二:
- interface IArr<T>{
- (value:T,count:number):Array<T>
- }
- const getArr1:IArr<string> = function <T>(value:T,count:number):T[]{ //在使用接口的时候就要确定类型
-
- }
- // 定义接口
- interface Idata{
- id:number,
- title:string,
- content:string,
- createTime:string
- }
- interface Itest<T>{
- code:T,
- data:Idata,
- message:string
- }
- function responseFn<U>(arg:U,count:number):Itest<number>{ //在使用的时候要指定类型
- let newArr:U[] = []
- for(let i = 0; i<count;i++){
- newArr.push(arg)
- }
- console.log(newArr)
- return {
- code:200,
- data:{
- id:1,
- title:'test1',
- content:'test1',
- createTime:'2022-01-02'
- },
- message:'成功'
- }
- }
- let test1 = responseFn(<string>'2',2)
- console.log(test1)
- let test2 = responseFn(<number> 2 ,4)
- console.log(test2)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。