前端TS学习第六天

本文介绍了泛型的基本概念,包括为何使用、如何定义以及其在类、接口和Vue3中的应用。重点讲解了泛型的宽泛性和严谨性、类中的ArrayList泛型实例、默认值设置、泛型约束和反向赋值的概念。
摘要由CSDN通过智能技术生成

泛型从入门到深入掌握

为什么要用泛型?泛型定义。

泛型

定义:

  • 定义时不明确使用时必须明确成某种具体数据类型的数据类型【泛型的宽泛】
  • 编译期间进行数据类型检查的数据类型【泛型的严谨】
    在这里插入图片描述

**好处就是可以灵活的设置变量类型,不仅如此还可以将设置的变量类型所包含的属性也体现出来。

interface Ref<T>{
    value:T
}

let ref:Ref<string>={
    value:"wangwu",
}
type Student={name:string,age:number}

let ref2:Ref<Student>={
    value:{name:"wangwu",age:23},
}

console.log(ref2.value.name);
export {}

泛型在类中的应用?封装一个面向对象的ArrayList类

class ArrayList<T>{
    arr:Array<T>;
    index:number=0;
    constructor() {
        this.arr=[]
    }
    add(ele:T){
        this.arr[this.index++]=ele;
    }
    get(index:number){
        return this.arr[this.index]
    }
}
let arrList = new ArrayList<string>();
arrList.add("abc")
arrList.get(23)

let arrList2 = new ArrayList<{ username:string;age:number}>();
arrList2.add({username:"wangwu",age:23})

export{}

泛型默认值

<T=“类型”>设置默认值

class ArrayList<T=any>{}//你想让它默认值是多少你就在any那个位置写类型就行

泛型约束

class Order{
    orderid!:boolean
    ordername!:string
    static count:number
    printOrd(){}
    static getCount(){}
}

//type OrdIdTyper = Order["orderid"]

type OrdInstanceAttrNames = keyof Order
// let oian:OrdInstanceAttrNames="ordername"

//下面就是提取一个类所有属性类型的通用方法
type InstancePropKeys<T extends object> = keyof T
type OrdPropKeys=InstancePropKeys<Order>

泛型在Vue3源码中的应用

在这里插入图片描述

extends keyof +keyof 的联合应用

在这里稍微插入一下keyof 的使用
keyof:是用于获取某个类型的所有键,其返回类型是联合类型

interface Person {
  name: string;
  age: number;
  location: string;
}

type K1 = keyof Person; // "name" | "age" | "location"
type K2 = keyof Person[];  // number | "length" | "push" | "concat" | ...
type K3 = keyof { [x: string]: Person };  // string | number

上述例子中,K3返回的是string | number是因为,在js中,对象的key,obj[1] == obj[“1”]。

泛型反向赋值

反向赋值是啥意思呢,我自我的理解哈,如果你是正向定义的泛型,比如
在这里插入图片描述
这就是相当于你直接给泛型定义了类型,但是呢,有时候定义好类型之后,就会在传参的时候让泛型的类型固定死,你就穿不了其他类型了,就比如上面这个例子,你就只能在传参的时候,第二个参数传age,但是呢如果想灵活一点,就不要在申明的时候加这个<>去定义泛型的类型,这样子就很麻烦,你可以像下面一样,直接不定义泛型的类型,你直接传参,你传的参数的类型就会反向给泛型,泛型就会拿到你参数的类型,这就叫泛型反向赋值,我也不知道理解的正不正确,有大佬可以评论!!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值