泛型

46 阅读3分钟
  • 泛型就是把类型当参数

5324cb4200b862edfa27579bb1c915a.png 一. 这是公式里面的传 二. a:number就是传进一个对象,里面的属性a是数字类型,他在一个数组里面

1.  定义了一个泛型接口`Iobj<T>`,它有三个属性:`state`(数字类型),`msg`(字符串类
型),和`data`(类型为`T`的数组)。

1.  接着,定义了一个常量`res`,它的类型是`Iobj<{ a: number }[]>`。这表示`res`是一个
对象,其`data`属性是一个包含对象的数组,这些对象具有一个名为`a`的数字属性。

1.  `res`对象被初始化为:

    -   `state`属性值为`200`    -   `msg`属性值为字符串`"操作成功"`    -   `data`属性值为一个包含两个对象的数组,这两个对象分别是`{ a: 1 }``{ a: 2 }`

type 定义的类型别名与接口(interface)接口在功能上是相似的

type ID = string | number; 这里 ID 是一个类型别名,它可以是一个 stringnumber 类型的值。

 // 泛型

    // 泛型函数  泛型接口  泛型类

    // 1、泛型函数

    // T相当于一个变量 这个变量表示类类型

    // 约定俗成 泛型变量一般用 T U V W X Y Z

    // function fn<T>(a:T):void

    // {

    // }

    // fn<number>(1);

    // fn<string>("a");

    // fn<Date>(new Date())
 例子2    
     function fn<T,U> 是收类型
     (a:T,b:U) 是用类型
     function fn<T,U>(a:T,b:U):void{
        
     }
     传类型
    fn<string,number>("a",10);
  1. 类型别名和接口的区别

    1、类型别名鼠标悬停时显示字面量,接口鼠标悬停时显示接口名
    2、接口是可以被extendsimplements的继承和实现的,别名不能被继承和实现
    3、当无法通过接口来描述一个类型,需要使用到联合类型,交叉类型或者元组类型等时,可
    以使用别名更快捷
    交叉类型就是继承
    

泛型工具类型

  • Partial

    Partial<T>是一个泛型工具类型,它将类型T的所有属性变为可选。这意味着,当你创建一个Partial<T>类型的变量时,你不需要为T中的所有属性提供值。

     type Person = {  
    
       name: string;  
    
       age: number;  
    
     };  
    
     type PartialPerson = Partial<Person>;  
    
     // 现在,PartialPerson 类型的对象可以只包含 `name`、`age` 或都不包含  
    
     const partialPerson1: PartialPerson = { name: "Alice" }; // 有效  
    
     const partialPerson2: PartialPerson = { age: 30 }; // 有效  
     
     const partialPerson3: PartialPerson = {}; // 也有效  
    
     const partialPerson4: PartialPerson = { name: "Bob", age: 25 }; // 同样有效
     
     
     
     
     
     
     
    
  • Pick 在原有类型中,挑选想要的类型。

Pick<T, K> 接受两个类型参数:

  • T:源类型,即你希望从中选择属性的类型。
  • K:属性键的集合,即从 T 中选择的属性名。

Pick<T, K> 的结果是一个新的类型,它只包含 TK 指定的那些属性。

    type Person = {  
      name: string;  
      age: number;  
      address: string;  
    };  

    type Address = Pick<Person, 'name' | 'age'>;  

    const person: PersonWithoutAddress = {  
      name: "Alice",  
      age: 30  
    }; // 有效,因为只包含了 'name' 和 'age' 属性  

    // 下面的代码将产生一个错误,因为 'address' 属性不在 ress 类型
    中  
    // const ress: Address = {  
    //   name: "Bob",  
    //   age: 25,  
    //   address: "123 Street"  
    // };ypeScript 编译器会报错,因为 `address` 不是 `PersonWithoutAddress` 类型的一部分。
  • exclude通常用作一个函数或配置选项,用于从某个集合、列表或范围中剔除或排除特定的元素或项: type 新类型= Pick<旧类型, 要移除的>

类型声明

    作用:给已存在的JS库提供类型声明  
    后缀:.d.ts
    ts文件:写ts代码的
    .d.ts文件:提供ts类型信息
    他们一般是第三文件