TS泛型理解学习笔记

Posted 森森

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS泛型理解学习笔记相关的知识,希望对你有一定的参考价值。

概念定义
    泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性,使接口,函数或类更加通用

    1.简单演示

    function fn<T> (value: T) : T { return value };
    const num: number = 11
    const res1 = fn(num)  --------返回 number类型
    const str: string = \'11\' 
    const res1 = fn(str)  --------返回 string类型

        总结:

函数fn后面带的一个<T>括号,括号里面的T是占位符可以随意写的,如<A>或者<B>
传入参数也可不申明类型,TypeScript 的编译器会利用类型推论来确定参数的类型
函数定义的时候不申明参数和返回值类型,而是在函数调用的时候去确定类型

    2.泛型类型
        一个泛型函数的类型如下:
        <泛型变量名称>(参数1: 泛型变量, 参数2: 泛型变量, ...参数n: 泛型变量) => 泛型变量

        可以以对象字面量的形式来定义泛型函数(这更像是接口),如

    let foo: `{ <T>(arg: T): void }`;
    foo = function <T>(arg: T): void {
      console.log(arg);
    }
    foo(11); // 11

        将上面的例子中的 { <T>(arg: T): void }改为接口,则有:

    interface IGeneric {
      <T>(arg: T): void
    }
    let foo: IGeneric = function <T>(arg: T): void {
      console.log(arg)
    }
    foo(11); // 11

    3.泛型约束
        泛型可以通过 extends 一个接口来实现泛型约束,写法如:<泛型变量 extends 接口>,例子:

    interface IArray {
          length: number
    }

    function logIndex<T extends IArray>(arg: T): void {
      for (let i = 0; i < arg.length; ++i) {
        console.log(i)
      }
    }

    let arr = [1, 2, 3,4]
    logIndex<number>(arr) // 报错
    logIndex<number[]>(arr) // 允许
    logIndex(arr) // 自动类型推导,允许

以上是关于TS泛型理解学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 学习笔记总结

笔记-java泛型详解

TypeScript教程# 15:泛型

Java泛型学习笔记 - 浅析泛型中通配符的使用

ts重点学习79-泛型类

ts重点学习73-泛型的基本使用