Рассмотрим этот код:
const obj = {
a: 1,
b: 2
}
let possibleKey: string = 'a'
if (possibleKey in obj) console.log(obj[possibleKey])
Когда possibleKey in obj
истинно, мы знаем, что possibleKey
имеет тип keyof typeof obj
, верно? Почему система типов TypeScript не обнаруживает это и не сужает string
к этому типу? Вместо этого он говорит:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ a: number; b: number; }'.