keyof 語法
常用的場景:
-
獲取對象的某一屬性值時
比如:
image.png
當(dāng)這么寫時,會造成兩個問題:
- 沒有類型保護(hù),所以ts會拋出這樣的一個錯誤
- ts無法進(jìn)行有效的類型推斷。
peopleName應(yīng)該是一個string,但ts推斷出來的卻是any。
原因是因為,ts無法知道傳進(jìn)來的key這個變量是否是people這個類型所具有的。
可以使用之前所學(xué)的泛型結(jié)合keyof解決這一問題。
代碼:
getInfo<T extends keyof Person>(key:T):Person[T]{
return this.info[key]
}
思路:
- keyof 好比是js中遍歷一個對象的屬性
代碼就轉(zhuǎn)換成
T extends name
相當(dāng)于
type T = name
這時候設(shè)置key為name
key:T
返回值就應(yīng)該是Person[name]
:person[T]
這樣以來ts就能推斷出獲取的屬性類型了。
