typescript 泛型的使用

typescript 泛型的使用,第1张

 * 1、什么是泛型: 我们可以理解为泛型就是在编译期间不确定方法的类型(广泛之意思),在方法调用时,由程序员指定泛型具体指向什么类型;

 * 2、泛型作用: 通常解决类,接口,方法的复用性,以及对非特定数据类型的支持;

/*
 * getMsg其中T为一个泛型

 * (msg:T)为T为类型

 * :T返回出去的也是一个泛型
*/
function getMsg(msg: T): T {
    return msg
}
let msg = getMsg('新增类型')
let num = getMsg(12)
console.log(msg, num);

let userInfo = {
    name: 'xt',
    age: 12
}

需求:定义一个对象想要返回对象中的值

let userInfo = {
    name: 'xt',
    age: 12
}

错的做法:

function getVal(o: object, key: string) {
    return o[key]
}

 改善型方法

但是返回的是any,这种写法和js没什么太大的意义了

function getVal(o: any, key: string) {
    return o[key]//返回any类型
}
// let name: any
let name = getVal(userInfo, 'name')
let age = getVal(userInfo, 'age')
console.log('name', name, age);

 最终正确使用typescript语法:

针对getVal这个方法可以用泛型约束

/**
 * K extends keyof T 意思是根椐传入的T类型获取T中的属性,也传的K必须在T中的属性中有
 */
function getProperty(obj: T, key: K) {
    return obj[key]
}
let name1 = getProperty(userInfo, 'name')
let age1 = getProperty(userInfo, 'age')
console.log(' K extends keyof T 意思是根椐传入的T类型获取T中的属性,也传的K必须在T中的属性中有', name1, age1);


 

 泛型条件
// 泛型条件
console.log('泛型条件=========>');
/**
 *解说: 返回类型为泛型,如果传入的泛型符合{ name: infer Tes } 就返回Tes 否则返回unknow
 */
type Fas = T extends { name: infer Tes } ? Tes : unknow
type FasTest = Fas<{ name: string }>//type FasTest = string  符合
type FasTest1 = Fas//type FasTest1 = unknow 不符合,类型中没有name
type FasTest2 = Fas<{ age: number }>//type FasTest2 = unknow 不符合,类型中没有name

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1324910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存