首页 > 其他分享 >【TS】泛型以及多个泛型参数

【TS】泛型以及多个泛型参数

时间:2023-01-29 21:24:24浏览次数:48  
标签:console log val 传入 TS 类型 参数 泛型

泛型

给函数或者属性定义类型的时候,类型是固定的,当业务发生变动时可能不好维护,例如:函数类型固定为string,后续需求更改不好维护,比如需要传入number类型,那么这个函数就不适用了

function add( val : string) : string{
     return val
}

为了解决这个问题,可以使用泛型,在调用的时候确定它是什么类型

  • 泛型:在定义函数、接口、类的时候不能预先确定要使用的数据类型,而是在使用函数、接口、类的时候才确定数据的类型
  • 如果直接在函数上定义数据类型,那么这个类型就固定了,后期只能通过类型重载更改
  • 为了便于维护,可以用到泛型
  • 给函数传入一个 自定义 类型,此类型由调用的时候规定,在调用是确定它的函数类型
    语法: function add<自定义>(val : 自定义) : 自定义 {}
function add<T>( val : T) : T{
 console.log(typeof val);
         return val
}

这样就定义好了泛型,这个<T>就是定义好的泛型,传入的类型是T返回的数据类型也是T,目前的类型不确定,在调用函数的时候确定是哪个类型。

// 在调用的时候确定,自定义类型为number 传入 数字类型的值
const arr1 = add<number>(1)
// 在调用的时候确定,自定义类型为string 传入 字符串类型的值
const arr2 = add<string>('东方不败')
// 在调用的时候确定,如果不传入类型,系统会自动类型推断
const arr3 = add(true)  

在这里插入图片描述
输出结果

console.log(arr1);
console.log(arr2);
console.log(arr3);

在这里插入图片描述


多个泛型参数

在使用泛型的时候可以规定多个,在传入时确定多个值的类型

// 传入 规定参数类型的值 ,返回 规定参数类型的值
function getMsg<T,S>(val : T , str : S) : [T,S]{
    return [val , str]
}

此处定义了两个泛型,在传入的时候需要定义两个数据类型与之对应

// 调用 getMsg 规定类型为 string 和 number  传入 字符串和数字
const arr = getMsg<string,number>('东方不败',100.123)

注意
此处传入的数据类型必须跟定义的数据类型位置一致,否则报错

// 报错,和规定传入的参数类型不匹配,必须是第一个参数字符串,第二个参数数字
const arr2 = getMsg<string,number>(100,'东方不败')  

在这里插入图片描述
既然泛型是在调用的时候确定其数据类型,那么可以用数字或字符串方法来检测是否可以使用

console.log(arr);  
console.log(arr[0].split(''));  // 正常,字符串类型可以使用字符串方法
console.log(arr[1].toFixed(2)); // 正常,数字类型可以使用数字方法

在这里插入图片描述


案例源码:https://gitee.com/wang_fan_w/ts-seminar

如果觉得这篇文章对你有帮助,欢迎点亮一下star

标签:console,log,val,传入,TS,类型,参数,泛型
From: https://www.cnblogs.com/wang-fan-w/p/17073841.html

相关文章

  • 【TS】函数重载--可选参数--默认参数
    可选参数--默认参数在ts中定义的数据类型,某些情况下只需要传入定义数据类型的一部分参数,比如:id、name、age、address,此时需要修改用户的名称,那么只需要传入id、name就够......
  • 【TS】any和void
    any类型any类型,在ts中是一个万能类型,它可以替代所有类型,也就是说定义了any类型,就不用担心ts的类型束缚,但如果所有的类型都使用any那么ts就失去了它的作用,我们使用ts就是为......
  • 【TS】object类型
    object是一个对象,在ts中定义对象类型的语法为:let变量名:object={}在object类型中,对象内部定义的值是不受类型约束的,只要是一个object类型即可,例如:letobj:object=......
  • 【TS】联合类型--类型断言--类型推断
    联合类型在实际开发中,我们接收的变量可能不是一个固定的数据类型,而是动态的多个数据类型,此时用单个固定的数据类型去接收很明显是不行的,为了解决这种可能会接收多个不同数......
  • 【TS】函数和函数类型
    在使用函数的时候,通常会给函数传值,或者给函数一个返回值调用,这个时候就会涉及到函数类型。函数类型分为两个方面:1、函数参数2、函数返回值语法:function函数名(参数......
  • 【TS】class类和接口
    class可以用来做数据的存储与回显,能将页面的数据分离出来并提取到class内,函数也可以抽离到class,实例化class进行调用。ts中的class类与js的class类基本相同,不同点在于ts的c......
  • 【TS】接口和接口继承
    接口接口也相当于语法规范,在使用ts编写的时候,需要注重的就是数据类型以及语法规范,恰好这里提供了一个接口,在进行传值的时候,传值的类型以及字段必须符合我们预期的类型规范......
  • 【TS】基础类型
    在ts中定义基础类型,语法:let变量名:数据类型=值//布尔类型----booleanletflag:boolean=trueflag=false在赋值的时候,不能赋值定义外的数据......
  • 【TS】数组和元组
    数组在ts中,定义数组类型语法:let变量名:数据类型[]=[值1,值2,值3]letarr1:number[]=[1,2,3,4]console.log(arr1);//输出[1,2,3,4]此外数字类型的定义还可......
  • 炉石传说 酒馆战棋 积分保护机制Developer Insights: Hearthstone Battlegrounds Rati
    https://hearthstone.blizzard.com/en-us/news/23523064BlizzardEntertainment09/28/2020 Greetings!I’mTian,aLeadDataScientistontheHearthstoneteam......