亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【金秋打卡】第14天-C01Vue3TypeScript-泛型(約束泛型)

標簽:
Typescript

课程内容

  • 为什么为加入泛型的概念

    • 定义一个函数,要为参数指定类型,也要为函数指定返回类型
    • 如果希望任意参数都能处理,返回类型也可以根据实际情况指定
    • 那就要使用泛型了
    • 泛型是在定义时指定为一个通用形式
    • 而在具体使用时再将其类型指定为具体类型
  • 泛型的定义

    function echo<T>(arg: T): T {
        return arg
    }
    const str: string = "abc"
    const result = echo(str)// 这时rsult类型为string
    const result1 = echo(true)// 这时result1的类型由传入参数类型决定
    
    function swap<T, U>(tuple: [T, U]): [U, T] {
        return [tuple[1], tuple[0]]
    }
    const result2 = swap(['string', 123])
    
  • 约束泛型

    • 当使用泛型时,希望调用长度属性,但由于不知道泛型是什么类型,所以在调用长度属性时会报错,比如

      function echoWithArg<T>(arg: T): T {
          console.log(arg.length)// 此行会报错,因为参数不知道会不会有length属性
          return arg
      }
      // 当上面内容修改为
      function echoWithArg<T>(arg: T[]): T[] {
          console.log(arg.length)// 此行会报错,因为参数不知道会不会有length属性
          return arg
      }// 由于数组有长度属性,所以上述代码不会报错
      const arrs = echoWithArr([1, 2, 3])
      // 但这种方案又会把参数类型限制为数组类型
      // 所以更好的方案是,让这个参数只能是包含length属性的类型
      interface IWithLength {
          length: number
      }
      function echoWithLength1<T extends IWithLength>(args: T): T {
          console.log(arg.length)
          return arg
      }
      const s1 = echoWithLength1('str')// 字符串参数是有length参数的
      const s2 = echoWithLength1({ length: 10})// 是一个对象,有length属性
      const s3 = echoWithLength1([1, 2, 3])
      

课程收获

泛型的自由是有代价的,在课程中的例子就是定义泛型类,必须要有length属性
约束泛型

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
9
獲贊與收藏
1

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消