TS个人学习笔记3---泛型 generics

本文深入探讨了泛型在TypeScript中的应用,包括如何在函数、接口和类中使用泛型以实现类型约束和灵活性。通过示例展示了泛型如何帮助提升代码的类型安全性,如`echo`函数和`swap`函数的泛型实现。此外,还介绍了如何使用接口约束泛型,以及泛型在类如`Queue`中的应用,确保了类型正确性。最后,泛型与接口的结合如`IKeyPair`展示了动态指定数据类型的能力。
摘要由CSDN通过智能技术生成

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

//应用场景 定义一个方法,返回传入的参数
function echo(arg){
	return arg
}

//如果此时不定义参数的类型,那么参数arg的类型为any,丧失了typescript的意义,但如果定义特定类型,那么只能传入指定类型的值
const str = echo('str') //any
const num = echo(123) //any

此时,可以使用泛型,用表示

function echo<T>(arg:T):T{
	return arg
}

//指定泛型类型
const str:string = echo('str') //string
const num:number = echo(123) //123

//也可以根据类型推论
const boo = echo(true) //true

泛型也可以指定多个参数类型

//返回翻转传入参数的函数
function swap<T,U>(value[T,U]):[U,T]{
	return [value[1],value[0]]
}

let res = swap([123,'123']) // 此时T为number,U为string
res[0] //string
res[1] //number

用类来约束泛型

interface IwithLength {
	length:number
}

function echoWitchLength<T extends IwithLength>(arg:T):T{
	console.log(arg.length)
	return arg
}

//此时 只要有length的属性或者方法,都可以返回
const str1 = echoWithLenght('123')
const arr1 = echoWithLenght([1, 2, 3])
const obj1 = echoWithLenght({ name: '123', length: 20 })

泛型和类

class Queue<T> {
	private data = []
	push(item:T){
		return this.data.push(item)
	}
	pop():T{
		return this.data.shift()
	}
}

const quque = new Queue<number>() //约束类中的泛型为number
queue.push(1)
console.log(queue.pop().toFixed())
queue.push('str') //此时就会报错,不能push string类型
//如果不使用泛型约束,那么queue.pop().toFixed()编译的时候不会报错,但代码运行的时候会报错,因为string没有toFixed方法,但是不使用泛型那么数据类型是any

泛型和接口

interface IKeyPair<T, U> {
    key: T
    value: U
}

//动态传入数据类型
let kp1: IKeyPair<number, string> = { key: 123, value: 'string' }
let kp2: IKeyPair<boolean,object> = {key:true,value:{good:'123'}}
let arrTwo:Array<number> = [1,2,3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值