首页 > 其他分享 >typeScript学习-泛型

typeScript学习-泛型

时间:2023-08-23 12:13:43浏览次数:126  
标签:typeScript age number value 学习 let 泛型 type

typeScript学习

泛型

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

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

泛型默认值。

泛型约束。

泛型在Vue3 源码中的应用。

exends keyof + keyof 的联合应用。

泛型反向赋值。

具有以下特点的数据类型叫泛型:

特点一:定义时不明确使用时必须明确成某种具体数据类型的数据类型。【泛型的宽泛】

特点二:编译期间进行数据类型检查的数据类型。【泛型的严谨】

 

// class 类名<泛型形参类型> 泛型形参类型一般有两种表示:1. A - Z 任何一个字母;2. 语义化的单词来表示,绝大多数情况,泛型都是采用第一种形式表示,如下:

class ArrayList<T>{
    array!: Array<T>
    add(data: T) {
        // ...
    }
    // ...
}

 

// any 不进行类型检查
interface Ref<V> {
    value: V
}

let ref: Ref<string> = {
    value: "abc"
}

type Student = { name: string, age: number }

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


console.log(ref2.value.age) // 23
console.log(ref2.value.name) // wangwu

 

泛型默认值

// 泛型的默认值
class ArrayList<T = any> {
    arr: Array<T>;
    index: number = 0
    constructor() {
        this.arr = []
    }
    add(ele: T) {
        this.arr[this.index++] = ele
    }
    get(index: number) {
        return this.arr[index]
    }
}

let arrlist3 = new ArrayList() // 默认值 any

export { }

 

keyof 表示获取一个类或者一个对象类型 或者一个接口类型的所有属性名【key】组成的联合类型。

索引访问类型

泛型约束

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

// 泛型约束
type InstancePropKeys<T extends object> = keyof T

// type OrdPropKeys = InstancePropKeys<{ username: 'wangwu' }>
type OrdPropKeys = InstancePropKeys<Order>

// type OrdIdType = Order["orderid"]
type OrdInstanceAttrNames = keyof Order
let oian: OrdInstanceAttrNames = "ordername"
// let oian: OrdInstanceAttrNames = "count" // 错误

反向为泛型赋值

class ObjectRefImpl<T extends object, K extends keyof T>{
    public readonly _v_isRef = true

    constructor(private readonly _object: T, private readonly _key: K) { }

    get value() {
        return this._object[this._key]
    }
    set value(newVal) {
        this._object[this._key] = newVal
    }
}

type ObjType = { username: string, age: number }

// let obj = new ObjectRefImpl<ObjType, "age">({ username: 'wangwu', age: 25 }, "username")
let obj = new ObjectRefImpl({ username: 'wangwu', age: 25 }, "username")
console.log("obj.value:", obj.value) // obj.value: 25

export { }

 

标签:typeScript,age,number,value,学习,let,泛型,type
From: https://www.cnblogs.com/kongbaige/p/17650292.html

相关文章

  • shell脚本学习记录
    参考文章:https://blog.csdn.net/weixin_43288201/article/details/105643692 1.脚本必须有可执行权限chmod+xtest.sh  //给test.sh文件的所有组增加可执行权限,也可以根据数字增加可读4、可写2、可执行1如:chmod755test.sh 2.脚本的调用形式以及编写规范  2.1......
  • Python基础入门学习笔记 070 GUI的终极选择:Tkinter7
    实例1:添加Tags1fromtkinterimport*23root=Tk()4text=Text(root,width=30,height=5)5text.pack()67#INSERT索引表示插入光标当前的位置8text.insert(INSERT,"IloveFishC.com!")#光标当前的位置插入9#注意,行号从1开始,列号则从0开始10text.ta......
  • Python基础入门学习笔记 067 GUI的终极选择:Tkinter4
    实例1:1fromtkinterimport*23root=Tk()#创建主窗口4e=Entry(root)#在主窗口中插入输入框5e.pack(padx=20,pady=20)67e.delete(0,END)#清空输入框8e.insert(0,"默认文本...")#设置输入框内容910mainloop() 实例2:1fromtkinterimp......
  • Python基础入门学习笔记 068 GUI的终极选择:Tkinter5
    Listbox组件如果需要提供选项给用户选择,单选可以用Radiobutton组件,多选可以用Checkbutton,如果提供的选项非常多,可以考虑使用Listbox组件。Listbox是以列表的形式显示出来,并支持滚动条操作。实例1:1fromtkinterimport*23root=Tk()#创建主窗口45theLB=Listb......
  • Python基础入门学习笔记 069 GUI的终极选择:Tkinter6
    Text组件Text(文本)组件用于显示和处理多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编辑器和网页浏览器使用。实例1:插入内容1fromtkinterimport*23root=Tk()4text=Text(root,width=30,height=2)5text.pack()6#INSERT......
  • [树状数组] 学习笔记
    原理intlowbit(intx){ returnx&(-x);}voidadd(intx,intk){ for(;x<=n;x+=lowbit(x))c[x]+=k;}intquery(intx){ intans=0; for(;x;x-=lowbit(x))ans+=c[x]; returnans;}单点修改+区间查询intlowbit(intx){ returnx&......
  • Python基础入门学习笔记 066 GUI的终极选择:Tkinter3
    实例1:Checkbutton组件1fromtkinterimport*23root=Tk()4#需要一个Tkinter变量,用于表示该按钮是否被选中5v=IntVar()6c=Checkbutton(root,text="测试一下",variable=v)78c.pack()9#如果被选中,那么变量v被赋值为1,否则为010#可以用个Label......
  • Vue学习笔记:Pinia Part02 Store
    在Pinia中有option和setup两种写法OptionStore与Vue的选项式API类似,我们也可以传入一个带有 state、actions 与 getters 属性的Option对象exportconstuseCounterStore=defineStore('counter',{state:()=>({count:0}),getters:{double:(state)......
  • Python基础入门学习笔记 064 GUI的终极选择:Tkinter
    >>>importtkinter #Tkinter是python默认的GUI库,导入Tkinter模块>>> 实例1:1importtkinterastk23root=tk.Tk()#创建一个主窗口,用于容纳整个GUI程序4root.title("FishCDemo")#设置主窗口对象的标题栏56#添加一个Label组件,可以显示文本、图标或者图......
  • Python基础入门学习笔记 065 GUI的终极选择:Tkinter2
    实例1:Label组件显示文字与gif图片1#导入tkinter模块的所有内容2fromtkinterimport*34#创建主窗口5root=Tk()6#创建一个文本Label对象,文字为左对齐,离左边边框距离为107textLabel=Label(root,8text="您下载的影片含有未成年人......