TypeScript 泛型的详细使用 <T, K, V>

  • 泛型 可以创建可重用的组件,一个组件可以支持多种类型,解决类、接口、方法的复用性,以及对不确定数据类型的使用。

  • 泛型字母可以自己随意指定,但是一个泛型字母在同一个函数中每次使用时只会代表一种数据类型。

  • 泛型的简单案例

    // 定义一个函数,用于批量生成数字数组
    function getArr1 (value: number, count: number): number[] {
      const arr: number[] = []
      for (let index = 0; index < count; index++) {
        arr.push(value)
      }
      return arr
    }
    // 调用生成数字数组
    const arr1: number[] = getArr1(1, 10)
    
    // 定义一个函数,用于批量生成字符串数组
    function getArr2 (value: string, count: number): string[] {
      const arr: string[] = []
      for (let index = 0; index < count; index++) {
        arr.push(value)
      }
      return arr
    }
    // 调用生成字符串数组
    const arr2: string[] = getArr2('1', 10)
    

    如果遇到上面这样的需求,那么就需要写多个方法来使用,下面通过泛型来进行实现

    // 定义一个泛型函数
    function getArr<T>(value: T, count: number): T[] {
      const arr: T[] = []
      for (let index = 0; index < count; index++) {
        arr.push(value)
      }
      return arr
    }
    // 调用生成数字数组
    const arr3: number[] = getArr<number>(1, 10)
    // 调用生成字符串数组
    const arr4: string[] = getArr<string>('1', 10)
    // 调用生成数字数组,不指定数据类型,默认会自动识传入的数据类型
    const arr5: number[] = getArr(1, 10)
    // 调用生成字符串数组,不指定数据类型,默认会自动识别传入的数据类型
    const arr6: string[] = getArr('1', 10)
    
  • 多个泛型参数的使用

    // 多个泛型参数
    function getList<K, V>(key: K, value: V): [K, V] {
      return [key, value]
    }
    const list1 = getList<string, number>('dzm', 20)
    const list2 = getList<number, number>(10, 20)
    // 不传默认会自动识别传入的参数类型
    const list3 = getList('dzm', 20)
    const list4 = getList(10, 20)
    
    
    // 多个泛型参数
    function getList1<K, V>(key: K, value: V, key2: K, value2: V) {
      return [key, value, key2, value2]
    }
    const list5 = getList1<string, number>('dzm', 20, 'xyq', 20)
    const list6 = getList1<number, number>(10, 20, 10, 20)
    // 不指定类型,每个泛型默认会识别传入的第一个参数的数据类型,后面如果有同样的泛型都需要按照一样的数据类型进行传入,否者就会报错
    // 比如第一个参数的泛型是 K,传入的第一个参数是 string, 那么后面 key2 的数据可以也必须是 string。
    const list7 = getList1('dzm', 20, 'xyq', 20)
    const list8 = getList1(10, 20, 10, 20)
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值