Difference between of “K extends keyof T” vs. directly using “keyof T”?

后端 未结 1 425
心在旅途
心在旅途 2020-12-15 20:56

Is there any difference between the following typescript definitions:

function prop(obj: T, key: K) {
    return obj[key];
}


        
相关标签:
1条回答
  • 2020-12-15 21:24

    The difference is that in the first case the return type will be T[K] while in the second case it will be T[keyof T]. K can at it's widest be keyof T but it can be a specific string literal type representing a key. This means if K is a specific property the return value will be of the same type as the property:

    function prop<T, K extends keyof T>(obj: T, key: K) {
        return obj[key];
    }
    function prop2<T>(obj: T, key: keyof T) {
        return obj[key];
    }
    
    let o = {
        p1: 0,
        p2: ''
    }
    
    let v = prop(o, 'p1') // is number, K is of type 'p1'
    let v2 = prop2(o, 'p1') // is number | string, no extra info is captured
    
    0 讨论(0)
提交回复
热议问题