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