这个Obj是从哪来的呀

这个Obj是从哪来的呀

相关截图:

https://img1.sycdn.imooc.com/climg/65d1a57c09dd3c7d17260946.jpg

问题描述:

老师,这里怎么就变成了 这样了,这个Obj是从哪来的呀,有点懵啊

相关代码:

function getValueByKey<Obj,Key extends keyof Obj> (obj: Obj, key: Key) { //
function getValueByKey<Obj,Key extends keyof Obj> (obj: Obj, key: Key) { //
    const value = obj[key]
    return value
}
const age = getValueByKey(alex, 'age')


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
向学习者学习 2024-03-10 21:47:28
Obj是自己定义的泛型的名字,
1泛型的意思是由具体数据决定类型现在暂时不确定,与any类型不同,any类型设置后一直是any类型,而泛型一遇到具体的数据就被确定为那个数据的类型了,类似类型推演,
2那么为什么不直接像js书写函数那样书写呢?那样子也是类型推演,泛型的优势还在于可以与其它泛型联动,比如这里的Key泛型,Key泛型其实是由Obj类型决定的。
如有错误那就是我理解错了。。。
好帮手慕小李 2024-02-18 14:54:59

同学你好,Obj和Key是老师自己起的泛型名。如下图:

https://img1.sycdn.imooc.com/climg/65d1a94f09016c9707330128.jpg

这里别懵,老师怎么讲怎么记住即可。

祝学习愉快!

  • 提问者 Tinaisbest #1

    老师,课程里面这个Obje意思是 泛指自己想要设置的对象类型Obj吗?因为我看别的例子都会有类似这种,这样起码 用的时候,我可以知道是设置成Person 这种类型的,

    type Person = {
        name: string,
        age: number,
        location: string
    }
    function getValueByKey (obj:any, key: keyof Person) {}


    2024-02-19 15:01:16
  • 好帮手慕久久 回复 提问者 Tinaisbest #2

    不是非常理解同学的表述。为了防止出现理解误差,我再给同学简单说一下,同学对照一下,看看咱俩的理解是不是一样的:

    <Obj,Key extends keyof Obj> 这种写法是定义泛型。

    <Obj,Key extends keyof Obj>简化一下就是<Obj,Key>,即这个泛型包含了两个类型,第一个是Obj,第二个是Key;只是Obj和Key之间,有一定的关联(Key extends keyof Ob)。

    可以类比函数的形参,去理解。<Obj,Key>就类似于函数的形参,名字可以自定义,只是这里用来定义该泛型中,包含的两个类型。函数getValueByKey有两个形参分别是obj和key,它们的具体值由调用时传入。而getValueByKey的参数的类型就受限于泛型<Obj,Key>。而Obj,Key的具体类型是什么,则是调用getValueByKey的时候传入、推断,比如:

    https://img1.sycdn.imooc.com/climg/65d30bf409d231f910420587.jpg

    2024-02-19 16:07:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师