Я хочу iterate
сверх object
, когда я использую for-in
, я замечаю очень странную вещь:
function forIn<T extends object>(obj: T): void {
for (let key in obj) {
// key's type is `Extract<keyof T, string>` instead of just `keyof T`
}
}
Мой скриншот VSCode:
Это приводит меня к двум вопросам:
- Почему тип
key
является Extract<keyof T, string>
вместо просто keyof T
? - Объект
key
всегда строкового типа, поэтому Extract<keyof T, string>
ничего не делает, верно?