以下打字稿定义之间是否有任何区别:
function prop<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
Run Code Online (Sandbox Code Playgroud)
和
function prop2<T>(obj: T, key: keyof T) {
return obj[key];
}
Run Code Online (Sandbox Code Playgroud)
我的意思是不,但也许我已经监督了一些事情.使用第一个版本(通常在文档中使用)是否有任何好处
Tit*_*mir 20
不同之处在于,在第一种情况下,返回类型将是T[K]
第二种情况下的返回类型T[keyof T]
.它可以是K
最宽的keyof T
但它可以是表示键的特定字符串文字类型.这意味着如果K
是特定属性,则返回值将与属性的类型相同:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1131 次 |
最近记录: |