TS泛型理解学习笔记

概念定义
    泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性,使函数或类更加通用
实战演示
    1.简单演示
        function fn<T> (value: T) : T { return value } 
        const num: number =1
        const res1 = fn(num)   --------------返回Number类型
        const str: String= '1'
        const res1 = fn(str)      ---------------返回String类型
        总结:
        函数fn后面带的一个 \括号,括号里面的T是占位符可以随意写的,如\或者\
        传入参数也可不申明类型,TypeScript 的编译器会利用类型推论 来确定参数的类型
        函数定义的时候不申明参数和返回值类型,而是在函数调用的时候去确定类型
    2.泛型类型
        一个泛型函数的类型如下:
        <泛型变量名称>(参数1: 泛型变量, 参数2: 泛型变量, ...参数n: 泛型变量) => 泛型变量

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

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

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

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

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

        interface IArray {
              length: number
        }

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

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

实战指在定
义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。以此增加代码通用性。

你可能感兴趣的:(TS泛型理解学习笔记)