TS-泛型

一见如故

  • 什么地方用到了泛型:函数、类型别名、接口、类
  • 定义泛型:在这些可以使用泛型的地方后面加尖括号,并写入‘形参’;
  • 使用泛型:在使用的函数或者类型后面加尖括号并注入类型(有的时候会被自动类型推断,有时不会)
  • 类型约束使用关键词extends

类型约束

interface WithLength {
	length: number
}
function fn<T extends WithLength>(arg: T): T{
	const len = arg.length
	return arg
}
------------------------------------------
function getProperty<O, K extends keyof O>(obj: O, key: K) {
	return obj[key]
}
let obj = {a: 1,b: 2, c: 3, d: 4}
getProperty(obj, 'a')  //可以
getProperty(obj, 'e') //不可以

泛型函数

function fn<T>(arg: T):T {
	return T
}
let a = fn(3)
let b = fn('中国')

泛型接口

// 函数要使用的参数类型,将来由用户自己定义
function fn<T>(arg: T): T {
	return arg
}
interface Myinterface<T> {
	(arg: T): T
}
const str:Myinterface<string> = fn

类型别名使用泛型(编写通用的辅助类型)

type OrNull<T> = T | null
type OneOrMany<T> = T | T[]
type OneOrManyOrNull<T> = OrNull<OneOrMany<T>>

泛型类

// 类中的某些类型交给用户自己定义
class MyClass<T> {
	value: T
	add: (x: T, y: T) => T
}
let instance = new MyClass<number>()
instance.value = 0
instance.add = function(x, y) {
	return x + y
}
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值